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

给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定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(void){
	int n,i,a,b,max,k;
	int s[1000],c[10];
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%d",&s[i]);
	}
	for(i=0;i<10;i++){
		c[i] = 0;
	}
	for(i=0;i<n;i++){
		a = s[i];
		while(a!=0){
			b = a % 10;
			a = a / 10;
			switch(b){
				case 0:c[0]++;break;
				case 1:c[1]++;break;
				case 2:c[2]++;break;
				case 3:c[3]++;break;
				case 4:c[4]++;break;
				case 5:c[5]++;break;
				case 6:c[6]++;break;
				case 7:c[7]++;break;
				case 8:c[8]++;break;
				case 9:c[9]++;break;
			} 
		}
	}
	max = c[0];
	for(i=0;i<10;i++){
		if(c[i]>max){
			max = c[i];
			k=i; 
		}
	}
	printf("%d:",c[k]);
	for(i=0;i<10;i++){
		if(c[i]==max){
			printf(" %d",i);
		}
	}
	return 0;
} 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答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),取决于使用桶排序还是哈希表。 总的来说,本题的解题思路比较直观,只需要对输入数据进行简单的统计即可,适合初学者练习统计算法。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值