XTU-OJ 1328-数码和

题目描述

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

进制2345678910111213141516数码10100202110403226242220191817161514数码和2424586421098765

其中数码和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 7 8

解题思路: 按步骤来,先把十进制数 n 转换成 2->16 进制的数的 数码和。在另外开一个标记数组 books,记录 该数码和 出现的次数。(n最大是 1e9,数码和最大也就100以内,我这里随便开了个长度 135,需要严谨点的可以自己去估一下)。记录出现的最大次数。

然后依次输出:最大次数、数码和、对应进制。

AC代码:

cpp 复制代码
#include <stdio.h>
#include <string.h>

int T,n,n0,i,j;
int maxNum;
int record[20],books[135];    // record[i][0] 保存 进制i的 数码和
void exchange()
{
    // 初始化
    maxNum = 0;
    memset(record,0,sizeof(record));
    memset(books,0,sizeof(books));
    // 2->16 进制转换
    for ( i = 2; i <= 16; i ++)
    {
        //   求各进制的 数码和
        n0 = n;
        while ( n0 )
        {
            record[i] += n0%i;
            n0 /= i;
        }
        books[record[i]] ++;
        if (maxNum < books[record[i]])      // 记录出现最多的 次数
            maxNum = books[record[i]];
    }
}
int main()
{
    scanf("%d",&T);
    while ( T --)
    {
        scanf("%d",&n);
        exchange();
        printf("%d\n",maxNum);
        for (i = 1; i < 135; i ++)
        {
            if (books[i] == maxNum)
            {
                printf("%d",i);                 // 输出 数码和
                for (j = 2; j <= 16; j ++)
                    if (record[j] == i)
                        printf(" %d",j);        // 输出 进制
                puts("");
            }
        }
    }
    return 0;
}
相关推荐
爱编程的鱼5 分钟前
C# 变量详解:从基础概念到高级应用
java·算法·c#
tkevinjd38 分钟前
反转链表及其应用(力扣2130)
数据结构·leetcode·链表
HalvmånEver41 分钟前
红黑树实现与原理剖析(上篇):核心规则与插入平衡逻辑
数据结构·c++·学习·算法·红黑树
哆啦刘小洋1 小时前
T:堆的基本介绍
算法
AresXue2 小时前
你是否也在寻找二进制和字符串的高效转换算法?
算法
Swift社区2 小时前
从 0 到 1 构建一个完整的 AGUI 前端项目的流程在 ESP32 上运行
前端·算法·职场和发展
RTC老炮2 小时前
webrtc弱网-BitrateEstimator类源码分析与算法原理
网络·人工智能·算法·机器学习·webrtc
程序员烧烤2 小时前
【leetcode刷题007】leetcode116、117
算法·leetcode
ghie90903 小时前
基于libsvm的支持向量机在MATLAB中的实现
算法·支持向量机·matlab
Rubisco..5 小时前
牛客周赛 Round 111
数据结构·c++·算法