首页 > 试题广场 >

数字的情绪

[编程题]数字的情绪
  • 热度指数:2247 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解

每个整数都希望可以整除很多数字,特别是它自身包含的数字,我们将整数分为三类:

1. 数字可以整除它包含的一部分数字,比如72,由,72两种数字组成,72可以整除2,我们称这个数字是开心的,用”H”表示。

2. 数字不能整除它包含的任何数字,比如73,由,73两种数字组成,73不能整除任何数,我们称这个数字是沮丧的,用”S”表示。

3. 数字可以整除它包含的所有数字,比如12,既可以整除1又可以整除2,我们称它是一个非常棒的数,用“G”表示。  (0可以被任何数整除。)


输入描述:
输入第一行包含一个整数T,表示数据组数(1<=T<=100). 接下来T行,每行包含一个正整数n(1<=n<=10^12),表示需要你判断的数字。


输出描述:
对于每组测试数据输出一行,“H”,“S”或“G”。表示整数种类。
示例1

输入

3
72
73
12

输出

H
S
G
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    long long num;
    while(t--)
    {
        cin>>num;
        long long res=0,n=num,t=0;
        while(n)
        {
            int m=n%10;
            n/=10;
            if(m==0||num%m==0)
                res++;
            t++;
        }
        if(res==0)
            cout<<"S"<<endl;
        else if(res==t)
            cout<<"G"<<endl;
        else
            cout<<"H"<<endl;
    }
    return 0;
}

发表于 2019-08-18 22:33:49 回复(0)
# 数学题
T = int(input())
for _ in range(T):
    s = input()
    res = 0
    for i in s:
        if i == '0':  # 0不能作为除数,当数字中有0,认为是可以整除的
            res += 1
        elif int(s) % int(i) == 0:
            res += 1
    if res == len(s):
        print("G")
    elif res == 0:
        print("S")
    else:
        print("H")
发表于 2020-08-15 20:46:51 回复(0)
k=input()
for i in range(int(k)) :
    n=input()
    flag1=flag2=0#flag1为1表示有无法整除的数,flag2为1表示有可以整除的数
    for j in n :
        if j!='0'and int(n)%int(j)!=0 : flag1=1
        if j=='0'or int(n)%int(j)==0 : flag2=1
    if flag1==0 and flag2==1 :print('G')
    elif flag1==1 and flag2==0 : print('S')
    else :print('H')



发表于 2019-12-27 10:09:27 回复(0)
#include <bits/stdc++.h>
using namespace std;
int main(){
    int T;
    cin>>T;
    for(int i=0;i<T;i++){
        long long n;
        int j=0,sum=0;
        char ans='S';
        cin>>n;
        string num=to_string(n);
        while(j<num.size()){
            if(num[j]=='0'||n%(num[j]-'0')==0){
                sum++;
            }
            j++;
        }
        ans = sum>0 ? 'H':'S';
        if(sum==num.size())
            ans='G';
        cout<<ans<<endl;
    }
    return 0;
}

编辑于 2019-10-24 17:22:22 回复(0)
#include <bits/stdc++.h>
using namespace std;

int main(){
    long T,n;
    cin>>T;
    while(T--){
        cin>>n;
        int cnt=0, w=0;
        long x = n;
        while(x){
            int t = x%10;
            if(t==0 || n%t==0)
                cnt++;
            x /= 10;
            w++;
        }
        if(cnt==w)
            cout<<"G"<<endl;
        else if(cnt==0)
            cout<<"S"<<endl;
        else
            cout<<"H"<<endl;
    }
    return 0;
}

发表于 2019-10-22 00:39:54 回复(0)
除0算对,我笑了。
n = int(input())
for _ in range(n):
    cur_s = input().strip()
    cur_int = int(cur_s)
    res = 0
    for i in cur_s:
        if i=='0' or cur_int%(int(i))==0:
            res+=1
    if res==len(cur_s):
        print('G')
    elif res==0:
        print('S')
    else:
        print('H')


发表于 2019-10-28 23:13:05 回复(3)
/*
思路:利用标志的方式判断,创建两个标志,当能够整除任一个部分数字,该标志为true,
当不能整除任一个部分数字,该标志为true
这样通过两个标志的组合便可以得到结果
注意除数为0的情况
注意int最多只能存10位的数,题目中是10^12,所以用long
*/

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        long[] arr = new long[n];
        for(int i = 0; i < n; i++) {
            arr[i] = sc.nextLong();
        }
        for (int i = 0; i < arr.length; i++) {
            boolean oneNum = false;
            boolean noNum = false;
            long temp = arr[i];
            while(temp > 0) {
                long di = temp % 10;
                if(di == 0 || arr[i] % di == 0) {
                    oneNum = true;
                }else {
                    noNum = true;
                }
                temp /= 10;
            }
            if(oneNum == true && noNum == true) {
                System.out.println("H");
            }else if(oneNum == false && noNum == true) {
                System.out.println("S");
            }else if(oneNum == true && noNum == false) {
                System.out.println("G");
            }
        }
    }
}

发表于 2022-08-31 11:46:12 回复(0)
#include<iostream>
#include<string>
int main()
{
    int T;
    long long n;
    while(std::cin>>T)
    {
        for(int i=0;i<T;i++)
        {
            std::cin>>n;
            std::string s=std::to_string(n);
            int count=0;
            for(int j=0;j<s.size();j++)
            {
                if(s[j]=='0')count++;
                if(s[j]!='0'&&n%(s[j]-'0')==0)count++;
            }
            if(count==0)std::cout<<"S"<<std::endl;
            else if(count<s.size())std::cout<<"H"<<std::endl;
            else std::cout<<"G"<<std::endl;
            
        }

    }
    return 0;
}
发表于 2020-09-19 11:25:16 回复(0)
#include<iostream>
#include<vector>
using namespace std;

int main()
{
    int T;
    long long n;
    cin >> T;
    vector<int> v;
    vector<long long> v1;
    while (T--)
    {
        cin >> n;
        v1.push_back(n);
    }
    for (auto& m : v1)
    {
        long long t = m;
        while (m)
        {
            v.push_back(m % 10);
            m /= 10;
        }
        int k = 0;
        for (int i = 0; i < v.size(); i++)
        {
            //当给0取余时,发生浮点错误,55555555,一直通过会是6.67%
            if (v[i]==0 || t%v[i] == 0) k++;
        }
        if (k == 0) cout << 'S' << endl;
        else if (k < v.size()) cout << 'H' << endl;
        else cout << 'G' << endl;
        v.clear();
    }

    system("pause");
    return 0;
}
发表于 2020-06-22 17:35:06 回复(0)
T = int(input())

a = [] # 存储输入的整数
for i in range(T):
    a.append(input())

for num in a:
    b = [] # 存放整数的每一位数
    for i in range(len(num)):
        if int(num[i]):
            b.append((int(num)) % (int(num[i])))
        else:
            b.append(0)
    if b.count(0) == len(b):
        print("G")
    elif b.count(0) == 0:
        print("S")
    else:
        print("H")
发表于 2020-06-17 09:39:52 回复(0)
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            long n  = Integer.valueOf(sc.nextLine());
            for(int i =0;i<n;i++){
                String str = sc.nextLine();
                long num = Long.parseLong(str);
                int total = 0;
                int length = str.length();
                for(int j =0;j<length;j++){
                    int value = str.charAt(j)-48;
                    if(value==0){
                       total++;
                    }else if(num%value==0)total++;
                }
                outPut(total,length);
            }
        }
    }
    public static void outPut(int total,int length){
        if(total==length){
            System.out.println("G");
        }else if(total>0){
            System.out.println("H");
        }else{
            System.out.println("S");
        }
    }
}

发表于 2020-06-04 11:18:58 回复(0)
这道题有巨坑。
1、输入的数会大于int的最大值。用long接收。
2、除以0算能够整除。。。
发表于 2020-05-29 18:31:54 回复(0)
/*
思路:利用标志的方式判断,创建两个标志,当能够整除任一个部分数字,该标志为true,
当不能整除任一个部分数字,该标志为true
这样通过两个标志的组合便可以得到结果
注意除数为0的情况
*/

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int m = Integer.parseInt(br.readLine());
        long[] arr = new long[m];
        for(int i = 0;i<m;i++)
            arr[i] = Long.parseLong(br.readLine());
        for(int i = 0;i<m;i++){
            boolean onenum = false;
            boolean nonum = false;
            long temp = arr[i];
            while(temp > 0){
                long divi = temp%10;
                if(divi == 0 || arr[i]%divi == 0){
                    onenum = true;
                }else{
                    nonum = true;
                }
                temp = temp/10;
            }
            if(onenum == true && nonum == true){
                System.out.println("H");
            }else if(onenum == false && nonum == true){
                System.out.println("S");
            }else if(onenum == true && nonum ==false)
                System.out.println("G");
        }
    }
}

发表于 2020-05-22 11:42:59 回复(0)
n = int(input())
for i in range(n):
    s = input()
    num = int(s)
    if num<10:
        print('G')
    else:
        flag = 0
        for i in set(s):
            if int(i) == 0 or (not num%(int(i))):
                flag +=1
        if flag == 0:
            print('S')
        elif flag != len(set(s)):
            print('H')
        else:
            print('G')

发表于 2019-11-04 16:40:50 回复(0)