xtu oj 1328 数码和

2023-12-13 12:16:49

题目描述

一个10进制数n在2~16进制下可以得到的不同的数码和,求在这些数码和中出现次数最多的数码和。 比如20,

其中数码和2和4分别出现了3次,为最多出现次数。

输入

第一行是一个整数T(1≤T≤1000),表示样例的个数。 以后每行一个整数n(16≤n≤109)。

输出

依次输出各样例的结果,每个样例输出的第一行是最多的次数。
然后,按数码和值的升序依次输出最多次的数码和,每行输出一种。
每行先输出这个数码和的值,然后按进制的顺序输出出现这个数码和的进制,每个值之间用一个空格隔开。

样例输入

3
17
20
1000000000

样例输出

4
5 3 5 7 13
3
2 2 4 10
4 3 5 9
2
34 6 7 8

AC代码

#include<stdio.h>
int main()
{
	int T;
	scanf("%d",&T);
	while(T--){
		int n;
		scanf("%d",&n);
		int a[20]={};//b进制 
		int b[50]={};//数码和 
		int c[105]={};//数码和出现次数 
		int i,j,t,cnt;
		for(i=2;i<=16;i++){
			t=n,cnt=0;
			while(t!=0){
				a[cnt]=t%i;
				t/=i;
				b[i]+=a[cnt];
				cnt++;
			}
		}
		int max=0;
		for(i=2;i<=16;i++){
			c[b[i]]++;
			if(c[b[i]]>max)max=c[b[i]];
		}
		printf("%d\n",max);
	    for(i=0;i<105;i++){
	    	if(c[i]==max){
	    		printf("%d",i);
	    		for(j=2;j<=16;j++){
	    			if(b[j]==i){
	    				printf(" %d",j);
					}
				}
				printf("\n");
			}
		}
	}
 } 

解题思路:理解进制的转换关系即可。

文章来源:https://blog.csdn.net/m0_75005390/article/details/134966588
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。