给定n个正整数,统计出每个整数出现的次数,按照出现次数从多到少顺序输出
时间: 2023-04-05 11:04:56 浏览: 401
好的,这个问题我可以回答。可以使用一个字典来记录每个整数出现的次数,然后按照出现次数从多到少排序输出即可。以下是示例代码:
```
n = int(input())
nums = list(map(int, input().split()))
count = {}
for num in nums:
if num in count:
count[num] += 1
else:
count[num] = 1
sorted_count = sorted(count.items(), key=lambda x: x[1], reverse=True)
for item in sorted_count:
print(item[0], item[1])
```
希望能够帮到你!
相关问题
C语言 给定n个正整数,统计各个数据出现次数,并依据从小到大的顺序排序输出
在C语言中,为了给定一组正整数并统计它们出现的次数,可以使用哈希表(如数组或者结构体结合数组的方式)来存储每个数字及其对应的计数,然后遍历数组对元素进行排序。以下是简单的步骤:
1. 定义一个大小适当的数组,比如`int count[100]`,假设所有输入的数字都在0-99之间。
```c
#include <stdio.h>
#define MAX_NUM 100
typedef struct {
int num;
int count;
} Data;
void countAndSort(int nums[], int n) {
// 初始化数组计数为0
for (int i = 0; i < MAX_NUM; i++) {
count[i] = 0;
}
// 遍历输入数组,增加对应数字的计数
for (int i = 0; i < n; i++) {
count[nums[i]]++;
}
// 使用计数数组创建一个新的数组,同时存储数据及其出现次数
Data data[MAX_NUM];
for (int i = 0; i < MAX_NUM; i++) {
if (count[i] > 0) {
data[i].num = i;
data[i].count = count[i];
}
}
// 对新数组按数字从小到大排序
qsort(data, MAX_NUM, sizeof(Data), compareData);
// 输出结果
for (int i = 0; i < MAX_NUM; i++) {
if (data[i].count > 0) {
printf("%d appears %d times.\n", data[i].num, data[i].count);
}
}
}
// 比较Data结构的排序函数
int compareData(const void *a, const void *b) {
return ((const Data *)a)->num - ((const Data *)b)->num;
}
int main() {
int nums[] = {5, 7, 1, 2, 3, 4, 2, 1, 5, 6};
int n = sizeof(nums) / sizeof(nums[0]);
countAndSort(nums, n);
return 0;
}
```
给定n个正整数和4个运算符:+、-、*、/,运算符没有优先级,按照从左到右的次序依次运算,例如:3+45不等于23,而是等于35。请设计一个算法,对于任意给定的整数m,用给出的n个正整数和4个运算符,经过运算得到整数m,要求运算次数最少。注意:n个数中每个数最多只允许用1次(即不使用或者使用1次),每种运算符可以多次使用。 输入格式: 第一行输入正整数n和整数m 第二行输入具体的n个正整数。 输出格式: 第一行输出最少运算次数。 第二行输出对应的运算表达式。若输入的n个正整数无法运算得到m,则输出“-1”。
这是一个NP完全问题,可以使用动态规划解决。具体步骤如下:
1. 定义状态:设f(i,j)表示使用前i个数,运算结果为j的最少运算次数。
2. 状态转移方程:
- 对于第i个数,可以选择使用或者不使用:
- 如果不使用第i个数,则f(i,j)=f(i-1,j);
- 如果使用第i个数,则需要考虑4个运算符,分别对应加、减、乘、除4种情况:
- 加法:f(i,j)=min(f(i,j),f(i-1,j-a[i])+1);
- 减法:f(i,j)=min(f(i,j),f(i-1,j+a[i])+1);
- 乘法:f(i,j)=min(f(i,j),f(i-1,j/a[i])+1);
- 除法:f(i,j)=min(f(i,j),f(i-1,j*a[i])+1)。
3. 边界条件:f(0,0)=0,其余初始化为正无穷。
4. 最终结果为f(n,m)。
注意:由于除法不满足结合律,因此需要对除法的顺序进行特殊处理,具体可以参考代码实现。
Python代码如下:
阅读全文