一题二解

题目描述

给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。

输入格式:

输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。

输出格式:

在一行中按格式“M: n1 n2 …”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。

输入样例:

1
2
3
1234 2345 3456

输出样例:

1
3: 3 4

分析

此题不难,之所以记录下来,是因为再获得每一个数字时使用了两种方法

其一为取模法

其二为转换为字符串(利用sprintf函数将数字转化为字符串)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//方法1
#include <stdio.h>
#include <string.h>
int main()
{
int n;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;++i)
{
scanf("%d",&a[i]);
}
int b[10]={0};
for(int i=0;i<n;++i)
{
int temp=a[i];
int ind[10],len=0;
while(temp!=0)
{
ind[len++]=temp%10;
temp/=10;
}
// char s[10];
//sprintf(s,"%d",a[i]);
//puts(s);
//printf("\n");
//int len=strlen(s);
//printf("len=%d\n",len);
for(int j=0;j<len;++j)
{
//int index=s[i]-'0';
// printf("s[i]=%c,index=%d \n",s[i],index);
//b[index]++;
b[ind[j]]++;
}
}
//for(int i=0;i<10;++i)printf("%d ",b[i]);

int max=0;
for(int i=0;i<=9;++i)
{
if(b[i]>max)
{
max=b[i];
}
}

printf("%d: ",max);
int f[n],cnt=0;
for(int i=0;i<=9;++i)
{
if(b[i]==max)
{
f[cnt++]=i;
}
}
for(int i=0;i<cnt;++i)
{
printf("%d",f[i]);
if(i<cnt-1)
printf(" ");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//方法2
#include <stdio.h>
#include <string.h>
int main()
{
int b[10]={0};

int n;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;++i)
scanf("%d",&a[i]);

for(int k=0;k<n;++k)
{
char s[10];
sprintf(s,"%d",a[k]);
int len=strlen(s);
for(int i=0;i<len;++i)
b[s[i]-'0']++;
}



int max=0;
for(int i=0;i<=9;++i)
{
if(b[i]>max)
{
max=b[i];
}
}

printf("%d: ",max);
int f[n],cnt=0;
for(int i=0;i<=9;++i)
{
if(b[i]==max)
{
f[cnt++]=i;
}
}
for(int i=0;i<cnt;++i)
{
printf("%d",f[i]);
if(i<cnt-1)
printf(" ");
}
}
凡希 wechat
喜欢所以热爱,坚持干货分享,欢迎订阅我的微信公众号
呐,请我吃辣条