Problem E 1328 数码和

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("");
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SQ_ZYX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值