求一批整数中出现最多的个位数字 (20分)

在这里插入图片描述

#include<stdio.h>
int main(){
	int n,i,t,a[1000],b[10];
	int max = 0;
	scanf("%d\n",&n);
	for(i = 0; i < n; i++){
		scanf("%d",&a[i]);
	}

	for(i = 0; i < n; i++){
		if(a[i] == 0)
			b[0]++;
		while(a[i] != 0){
			t = a[i] % 10;
			b[t]++;
				a[i] = a[i] / 10;}
	}

	for(t = 0; t < 10; t++){
		if(b[t] > max)
			max = b[t];
	}
	printf("%d:", max);
	for(t = 0; t < 10; t++){
		if(max == b[t])
			printf(" %d", t);
	}

	return 0;
}
### 回答1: 首先需要统计每个个位数出现的次数,然后找出出现次数最多个位数即可。 具体步骤如下: 1. 定义一个长度为10的数组count,用于统计每个个位数出现的次数,初始值都为0。 2. 遍历整数数组,对于每个整数,取出个位数,将对应的count数组元素加1。 3. 遍历count数组,找出最大值maxCount和对应的下标maxIndex,即为出现次数最多个位数。 4. 返回maxIndex即可。 示例代码如下: ```python def find_most_frequent_digit(nums): count = [0] * 10 for num in nums: digit = num % 10 count[digit] += 1 maxCount = max(count) maxIndex = count.index(maxCount) return maxIndex ``` 注意:如果有多个个位数出现次数相同且都是最大值,以上代码只会返回其一个。如果需要返回所有出现次数最多个位数,可以将maxIndex改为一个列表,每次找到一个最大值就加入列表。 ### 回答2: 首先,我们需要将这批整数逐一地离出它们的个位数。可以使用取模运算来实现,例如对于整数x,x%10可以得到它的个位数。然后,我们可以使用一个数组来存储每个数出现的次数。初始时,数组的所有元素都为0。如果一个整数个位数为n,则将数组下标为n的元素加1。最后,遍历数组,找到出现次数最多的元素的下标,即为出现最多个位数。 以下是伪代码实现: // 输入整数集合nums // 初始化数出现次数数组count for i in range(10): count[i] = 0 // 遍历整数集合,统计每个数出现次数 for num in nums: digit = num % 10 count[digit] += 1 // 初始化最大出现次数和对应的数 max_count = 0 max_digit = -1 // 遍历数出现次数数组,找到出现次数最大的数 for i in range(10): if count[i] > max_count: max_count = count[i] max_digit = i // 输出结果 print("出现最多个位数是:", max_digit) 需要注意的是,如果有多个数出现次数相同且均为最大次数,则程序只会返回其一个数。如果需要全部输出,可以将所有出现最大次数的数保存在一个列表。 ### 回答3: 输入一批整数,要找出这个整数集合出现最多个位数。可以列出以下解题步骤: 1. 输入一批整数,要组成整数集合; 2. 初始化一个长度为10的数组,用于存储数0-9出现的次数,初始值全部设为0; 3. 对于每一个整数,取个位数,将对应位置的计数值加1; 4. 找出计数值最大的位置,即为出现最多个位数; 5. 输出结果。 代码示例: ```python nums = input('请输入整数集合,以空格隔:').split() nums = [int(x) for x in nums] count = [0] * 10 # 初始化数组 for num in nums: digit = num % 10 # 取个位数 count[digit] += 1 # 计数 max_count = max(count) # 找出最大次数 most_digit = count.index(max_count) # 找出出现最多的数 print('在整数集合出现最多个位数是{},共出现{}次。'.format(most_digit, max_count)) ``` 以上代码将输入的整数集合割成列表,然后使用循环将每个数个位数找出来,并在计数数组相应位置累加。最后找出计数数组最大次数和对应位置,输出结果。 这个算法的时间复杂度为O(n),其n为输入整数集合的总位数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值