某次科研调查时得到了n 个自然数,每个数均不超过1500000000(1.5×109) 。已知不相同的数不超过10000 个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。本题目禁止使用STL及包含可以使用的相关调用。C语言代码
时间: 2024-10-19 21:16:04 浏览: 15
Search Number 科研调查时得到了n个自然数,每个数均不超过1500000000。已知不相同的数不超过10000个,现在需要在其中查找某个自然数,如找到则输出并统计这个自然数出现的次数,如没找到则输出NO。
5星 · 资源好评率100%
要在不使用STL的情况下解决这个问题,我们可以创建一个固定大小的数组,这个数组长度大于最大的可能出现的自然数,然后遍历输入的数据,对每个数直接在数组对应的索引位置加一。最后,遍历这个数组,输出每个索引及其对应值,即数字出现的次数。
这是一个基本的解决方案,假设数组大小为`MAX_NUMBER + 1`:
```c
#include <stdio.h>
#define MAX_NUMBER 1500000000
int count[1500000001] = {0}; // 初始化所有计数为0
void input_and_count(int n, int numbers[]) {
for (int i = 0; i < n; i++) {
if (numbers[i] <= MAX_NUMBER) { // 确保不会越界
count[numbers[i]]++; // 更新计数
}
}
}
void print_counts() {
for (int i = 0; i <= MAX_NUMBER; i++) {
if (count[i] > 0) { // 只打印非零计数
printf("%d: %d\n", i, count[i]);
}
}
}
int main() {
int n;
scanf("%d", &n);
int numbers[n];
// 从输入获取数据
for (int i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
input_and_count(n, numbers);
print_counts();
return 0;
}
```
阅读全文