7-172 求一批整数中出现最多的个位数字

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

输入格式:

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

输出格式:

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

输入样例:

3
1234 2345 3456

输出样例:

3: 3 4

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include <stdio.h>
#define len 1000
int main(int argc, char *argv[])
{
	int n,i,max=0,digit[10]={0};
	char temp;
	
	scanf("%d\n",&n);		//不要管忘记 &
	while(n){
		scanf("%c",&temp);
		if(temp>='0'&&temp<='9'){
			i=temp-'0';
			digit[i]++;
		}else{
			n--;
		}
	}
	for(i=0;i<10;i++){		//找出最大次数 
		if(max<digit[i]){
			max=digit[i];
		}
	}
	printf("%d:",max);
	for(i=0;i<10;i++){		//按从小到大的顺序排列 
		if(max==digit[i]){
			printf(" %d",i);
		}
	}
	
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 这个问题可以通过统计每个个位数字出现的次数来解决。首先,我们可以将所有整数个位数字提取出来,然后统计每个数字出现的次数。最后,找到出现次数最多的数字即可。 举个例子,假设我们有以下一批整数: [123, 456, 789, 321, 654, 987, 111, 222, 333] 我们可以将它们的个位数字提取出来,得到: [3, 6, 9, 1, 4, 7, 1, 2, 3] 然后,我们可以统计每个数字出现的次数,得到: 1出现了2次 2出现了1次 3出现了2次 4出现了1次 6出现了1次 7出现了1次 9出现了1次 因此,出现次数最多的个位数字是1和3,它们都出现了2次。 ### 回答2: 要一批整数出现最多的个位数字,我们可以把每个数字个位数都提取出来,然后做个统计。具体的步骤如下: 1. 将这一批数字全部提取个位数,存储到一个新数组; 2. 遍历新数组,对每个数字进行计数,记录出现次数; 3. 找出出现次数最多的数字,即为所。 下面我们详细说明每一步的实现方法: 1. 将整数提取个位数: 这个可以使用取余操作实现,即用原数字对10取余,得到的余数就是个位数。例如,135的个位数是5,计算方法是135%10=5。 2. 对每个数字进行计数: 为了记录每个数字出现的次数,我们可以使用一个HashMap,将数字作为key,将出现次数作为value。这样,我们就可以在遍历新数组的过程,不断更新HashMap的值,记录出现次数。 3.找到出现次数最多的数字: 当我们统计完每个数字出现次数后,就可以遍历一遍HashMap,找到出现次数最大的数字。具体的实现可以用一个变量max来记录当前已经找到的数字出现次数最大值,每次遍历时,如果发现某个数字出现次数大于max,就更新max和对应的数字。 总结起来,要一批整数出现最多的个位数字,就是个比较简单的统计问题,可以用HashMap实现。虽然间可能会有一些复杂的逻辑,但是只要分步骤来实现,就比较容易理解和实现了。 ### 回答3: 要出某一批整数出现最多的个位数字,可以使用哈希表来解决。首先定义一个长度为10的数组,记录0~9这10个数字整数出现的次数。然后,对于每一个整数,取其个位数字,然后在数组对应位置的计数加1。最后,遍历数组,找出出现次数最多的数字即可。 具体的算法步骤如下: 1. 定义一个长度为10的数组count,用于记录0~9这10个数字整数出现的次数。 2. 定义一个变量maxCount,用于记录出现最多的次数。 3. 定义一个变量maxDigit,用于记录出现最多的个位数字。 4. 对于每个整数,取其个位数字,并在count数组对应位置的计数加1。 5. 遍历count数组,找出出现次数最多的数字和次数。 6. 返回出现最多的数字。 下面是具体的实现代码: ``` #include <iostream> #include <vector> using namespace std; int mostFrequentDigit(vector<int> nums) { int count[10] = {0}; int maxCount = 0; int maxDigit = -1; for (int num : nums) { int digit = num % 10; count[digit]++; } for (int i = 0; i < 10; i++) { if (count[i] > maxCount) { maxCount = count[i]; maxDigit = i; } } return maxDigit; } int main() { vector<int> nums = {123, 456, 789, 123, 456}; int result = mostFrequentDigit(nums); cout << "出现次数最多的数字是:" << result << endl; return 0; } ``` 以上代码的时间复杂度为O(N),其N为整数的数量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

涛声依旧很冷

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

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

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

打赏作者

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

抵扣说明:

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

余额充值