习题7-2 求一批整数中出现最多的个位数字 (20 分)(C语言)

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

输入格式:

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

输出格式:

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

输入样例:

3
1234 2345 3456

结尾无空行

输出样例:

3: 3 4

结尾无空行

#include <stdio.h>
int main(){
int n,x,c=0;
static int num[1005],shu[15],h[15];
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&num[i]);
		x=num[i];
		if(x==0)shu[0]+=1;
		while(x>0){
			shu[x%10]+=1;
			x/=10;
		}
	}
	for(int i=0;i<10;i++)h[i]=i;
	for(int i=0;i<10-1;i++){
		for(int j=1;j<10;j++){
			if(shu[h[j-1]]<shu[h[j]]){
				c=h[j-1];h[j-1]=h[j];h[j]=c;
			}
		}
	}
	c=shu[h[0]];printf("%d: %d",shu[h[0]],h[0]);
	for(int i=1;i<10;i++){
		if(shu[h[i]]==c)printf(" %d",h[i]);
	}
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 题目描述: 给定一批整数出现最多个位数。 思路: 1. 定义一个典,用于记录每个数出现的次数。 2. 遍历整数列表,将每个数个位数取出来,并在对应的值加1。 3. 遍历典,找到出现次数最多的数。 4. 返回出现次数最多的数。 代码实现: ```python def max_digit(nums): count = {} for num in nums: digit = num % 10 if digit in count: count[digit] += 1 else: count[digit] = 1 max_count = max_digit = for digit, cnt in count.items(): if cnt > max_count: max_count = cnt max_digit = digit return max_digit ``` 测试样例: ```python assert max_digit([123, 456, 789, 111, 222, 333]) == 1 assert max_digit([123, 456, 789, 111, 222, 333, 444]) == 4 assert max_digit([123, 456, 789, 111, 222, 333, 444, 555, 666, 777, 888, 999]) == 1 ``` ### 回答2: 这道题需要我们首先读入一批整数,然后统计它们出现最多个位数。我们可以使用桶排序的思想,在一个长度为10的数组记录每个数出现的次数,最后找到出现次数最多的数。具体步骤如下: 首先,定义一个长度为10的数组count,记录每个数出现的次数,初始化为0。 然后,读入第一个整数num,取出它的个位数,将count数组对应的位置加1。 接着,逐个读入整数,取出它们的个位数,并在count数组对应的位置上加1。 最后,遍历count数组,找到出现次数最多的数,输出其索引值。 下面是一个示例代码: ```python n = int(input()) # 输入整数个数 nums = list(map(int, input().split())) # 输入整数列表 count = [0] * 10 # 初始化计数数组 for num in nums: digit = num % 10 # 取出个位数 count[digit] += 1 # 在计数数组上加1 max_count = max(count) # 找到最大的计数 for i in range(10): if count[i] == max_count: # 找到出现次数最多的数 print(i) break ``` 以上就是本题的解题思路和示例代码。需要注意的是,输入的整数可能很大,可以使用Python内置的bigint类型来处理。 ### 回答3: 题目要我们在一批整数找到出现最多个位数。这是一道比较典型的统计题目。 我们可以采用桶排序的思想。创建一个长为10的桶,别表示数0~9在输入数据出现的次数。遍历输入数据,对于每个数,将其个位数上的数在桶对应的位置加1。最后遍历桶,找到出现次数最多的数即可。 另外,我们还可以使用哈希表进行统计。创建一个包含0~9数及其出现次数的哈希表,遍历输入数据,对于每个数,将其个位数在哈希表对应的出现次数加1。最后遍历哈希表,找到出现次数最多的数即可。 无论使用哪种方法,时间复杂度都是O(n),其n为输入数据的个数。空间复杂度为O(1)或O(10),取决于使用桶排序还是哈希表。 总的来说,本题的解题思路比较直观,只需要对输入数据进行简单的统计即可,适合初学者练习统计算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值