7-1求一批整数中出现最多的个位数字(10 分)

本文介绍了一种算法,用于分析一组整数序列,并找出出现次数最多的个位数字。通过读取整数序列,算法统计每个数字的每一位,特别是个位数的出现频率,最终输出出现次数最多的个位数字及其频率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。
输入格式:输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。
输出格式:在一行中按格式“M: n1 n2 …”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。

#include<stdio.h>
int main(void)
{
	int temp,n,max=0;
	int time[180]={0};
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&temp);
	while(temp>0){
		time[temp%10]++;
		temp=temp/10;
	}}
	for(int i=0;i<180;i++){
		if(max<time[i])
		max=time[i];
	}
	printf("%d:",max);
	for(int i=0;i<180;i++){
		if(max==time[i])
		printf(" %d",i);
	}
	return 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出现了17出现了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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值