2021年下学期《C语言程序设计》作业8-函数2
Description | ||
数码和题目描述一个10进制数n在2∼16进制下可以得到的不同的数码和,求在这些数码和中出现次数最多的数码和。 比如20,进制2345678910111213141516数码10100202110403226242220191817161514数码和2424586421098765 其中数码和2和4分别出现了3次,为最多出现次数。 输入第一行是一个整数T(1≤T≤1000),表示样例的个数。 以后每行一个整数n(16≤n≤109)。 输出依次输出各样例的结果,每个样例输出的第一行是最多的次数。 |
1、计算并统计所有数码和出现的次数,并找到出现次数的最大值。
2、依据出现次数的最大值,找出所有数码和的值。
3、依据数码和的值找出进制。
#include<stdio.h> //坑
#include<math.h> //坑
#include<algorithm>
#include<cstring>
using namespace std;
int shuma(int x,int y) {
int tol=0;
while(x!=0) {
tol+=x%y;
x/=y;
}
return tol;
}
int main() {
int nn;
scanf("%d",&nn);
for(int i=1; i<=nn; i++) {
int n;
scanf("%d",&n);
int shumahe[20];
int cishu[101]= {0};
int max=0;
for(int j=2; j<=16; j++) {
shumahe[j]=shuma(n,j);
cishu[shumahe[j]]++;
max=cishu[shumahe[j]]>max? cishu[shumahe[j]]:max;
}
printf("%d\n",max);
for(int j=1; j<=100; j++) {
if(cishu[j]==max) {
printf("%d",j);
for(int k=2; k<=16; k++) {
if(shumahe[k]==j) {
printf(" %d",k);
}
}
puts("");
}
}
}
}