给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数n(≤1000),在第二行中给出n个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“m: n1 n2 ...”输出,其中m是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。
时间: 2023-05-31 12:19:05 浏览: 206
### 回答1:
\u8fd9\u4e00\u9898\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u65b9\u6cd5\u89e3\u51b3\uff1a
1. \u5bf9\u4e8e\u8f93\u5165\u7684\u6574\u6570\u5219\u53ef\u4ee5\u4f7f\u7528Python\u7684\u521b\u5efa\u5e76\u8fd0\u884c\u4ee5\u4e0b\u5904\u7406\uff1a
```
num_list = input().split()
freq = [0] * 10
for num in num_list:
for digit in num:
freq[int(digit)] += 1
max_freq = max(freq)
for i in range(9, -1, -1):
if freq[i] == max_freq:
print(i, end=' ')
```
\u4ee5Python\u8bed\u8a00\u7f16\u5199\u7684\u4ee3\u7801\u4e3a\u4f8b\uff0c\u8be5\u4ee3\u7801\u4e00\u822c\u4ee5input\u51fd\u6570\u8f93\u5165\u6574\u6570\uff0c\u8fd0\u7528split\u51fd\u6570\u5206\u5272\u4e3a\u4e00\u4e2a\u6570\u5b57\u5217\u8868num_list\u3002\u5185\u5b58\u4e00\u4e2a\u957f\u5ea6\u4e3a10\u7684\u5217\u8868freq\uff0c\u7528\u4e8e\u8bb0\u5f55\u6bcf\u4e2a\u6574\u6570\u6bcf\u4e2a\u4f4d\u6570\u5b57\u7684\u51fa\u73b0\u6b21\u6570\u3002\u5217\u8868freq\u7684\u7b2c\u4e00\u4f4d\u4ee3\u8868\u4e86\u6570\u5b570\u7684\u51fa\u73b0\u6b21\u6570\uff0c\u7b2c\u4e8c\u4f4d\u8868\u793a\u6570\u5b573\u7684\u51fa\u73b0\u6b21\u6570\uff0c\u4ee5\u6b63\u6587\u4f4d\u51fa\uff0c\u7ecf\u8fc7\u8fd9\u6837\u7684\u5904\u7406\u8ba1\u7b97\u51fa\u6bcf\u4e2a\u6574\u6570\u6bcf\u4e2a\u4f4d\u6570\u5b57\u7684\u51fa\u73b0\u6b21\u6570\u3002
\u5217\u8868freq\u8ba1\u7b97\u5b8c\u6210\u4e4b\u540e\uff0c\u7528max\u51fd\u6570\u8bb0\u5f55\u6700\u9ad8\u7684\u51fa\u73b0\u6b\u8fd9\u91cc\u6211\u4f1a\u4f7f\u7528Python\u7f16\u5199\u4e00\u4e2a\u7b80\u5355\u7684\u7a0b\u5e8f\uff0c\u8fdb\u884c\u5206\u6790\u3002
```python
# -*- coding: utf-8 -*-
import sys
# 从第一个参数中读取整数n
n = int(sys.argv[1])
# 从第二个参数中读取一串不超过范围的非负整数
numbers = list(map(int, sys.argv[2].split()))
max_count = 0 # 最大出现次数
result = [] # 最大出现次数的数字列表
# 统计每个数字的每一位的出现次数
digit_counts = {}
for num in numbers:
while num > 0:
digit = num % 10
if digit not in digit_counts:
digit_counts[digit] = [0] * n
digit_counts[digit][n - len(str(num))] += 1
num //= 10
# 找出出现次数最多的数字
for digit in digit_counts:
count = max(digit_counts[digit])
if count > max_count:
max_count = count
result = [digit]
elif count == max_count:
result.append(digit)
# 输出结果
print("m: ", max_count, end=' ')
for digit in sorted(result):
print(digit, end=' ')
print()
```
如果将程序保存为`max_digit.py`,则可以通过以下命令运行程序:
```
python max_digit.py 4 1234 2345 3456
```
其中,第一个参数`4`表示最大整数位数为4(即输入的3个整数中最多有4位数字),第二个参数`1234 2345 3456`为3个整数。程序输出结果为:
```
m: 3 3 4
```
其中,`m: 3`表示最大出现次数为3,`3 4`表示在所有数字中出现次数最多的数字是3和4。
### 回答2:
题目分析:
题目要求我们分别对每个数的个位数字进行统计出现次数,然后找出出现次数最多的个位数字,输出它们出现的次数以及对应的数字。因为需要统计数字的出现次数,所以我们可以使用桶排序的思想,即遍历每个数的个位数字,用一个数组对该数字出现的次数进行记录,最后再遍历该数组,找出出现次数最多的数字和出现次数即可。
具体思路:
1、读入整数n和n个整数num。
2、定义一个数组count,下标表示数字,值表示该数字出现的次数,初始化为0。
3、遍历num,对每个数的个位数字在count数组中进行记录。
4、遍历count数组,找出出现次数最多的数字和出现次数。
5、输出结果。
Python3代码实现:
### 回答3:
题目描述
给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。
输入格式:
输入在第1行中给出正整数n(≤1000),在第二行中给出n个不超过整型范围的非负整数,数字间以空格分隔。
输出格式:
在一行中按格式“m : n1 n2 ...”输出,其中m是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。
思路1
1.读取整数个数和整数序列。
2.遍历整数,由于输入的数据均为正数,可以将整数转为字符串,枚举字符串中的每一位,统计数字出现次数,用一个数组来统计。
3.输出数字出现次数最多的数字,统计时统计的数字可以为多个,可以用数组来存储。同时输出时按从小到大的顺序排列。
时间复杂度
遍历所有整数的每一位,故时间复杂度为O(ln),l为整数位数,n为整数个数。
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
int cnt[10] = {0}; // 统计数字出现次数的数组
while(n--){
int x;
cin >> x;
string s = to_string(x); // 将整数转为字符串
for(int i=0;i<s.size();i++){
cnt[s[i]-'0']++;
}
}
int maxCnt = 0;
for(int i=0;i<10;i++){
if(cnt[i] > maxCnt){
maxCnt = cnt[i];
}
}
cout << maxCnt << " :";
for(int i=0;i<10;i++){
if(cnt[i] == maxCnt){
cout << " " << i;
}
}
cout << endl;
return 0;
}
思路2
1.读取整数个数和整数序列。
2.遍历整数,由于输入的数据均为正数,可以将整数取余得到个位数字,统计数字出现次数,用一个数组来统计。
3.输出数字出现次数最多的数字,统计时统计的数字可以为多个,可以用数组来存储。同时输出时按从小到大的顺序排列。
时间复杂度
遍历所有整数,故时间复杂度为O(n),n为整数个数。
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
int cnt[10] = {0}; // 统计数字出现次数的数组
while(n--){
int x;
cin >> x;
while(x){
cnt[x%10]++;
x /= 10;
}
}
int maxCnt = 0;
for(int i=0;i<10;i++){
if(cnt[i] > maxCnt){
maxCnt = cnt[i];
}
}
cout << maxCnt << " :";
for(int i=0;i<10;i++){
if(cnt[i] == maxCnt){
cout << " " << i;
}
}
cout << endl;
return 0;
}
阅读全文