1) 第一种思路很简单,在全局定义一个大数组,所有元素初始为0,每输入一个数时,就在以这个数为数组下标的元素加一,最后输出结果。
参考代码如下:
#include <stdio.h> int arr[1000000]; int main(void) { int n; scanf("%d", &n); int tmp; int i; for (i = 0; i < n; i++) { scanf("%d", &tmp); arr[tmp]++; } for (i = 0; i < 1000000; i++) { if (arr[i] != 0) { printf("%d %d\n", i, arr[i]); } } return 0; }
2) 第二种方法就是比较直接的想法,将输入的所有数存放在一个数组中,先对数组进行从小打到排序,然后对该数组进行处理。
参考代码如下:
#include <stdio.h> int main(void) { int n; scanf("%d", &n); int arr[n]; int i; for (i = 0; i < n; i++) { scanf("%d", &arr[i]); } int j; for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n; j++) { if (arr[i] > arr[j]) { int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } } //处理方式如下: i = 0; int tmp; int num = 0; while (i != n) { tmp = arr[i]; while (arr[i] == tmp) { num++; i++; } printf("%d %d\n", tmp, num); num = 0; } return 0; }
0.0分
11 人评分
#include<stdio.h> int a[1000000]={0}; int main() { int n,m; int i,j; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&m); a[m]++; } for(i=1;i<=1000000;i++) { if(a[i]>0){ printf("%d %d\n",i,a[i]); } } return 0; } 麻烦各位看下哪里错了
A+B for Input-Output Practice (IV) (C++代码)浏览:828 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:698 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:572 |
九宫重排 (C++代码)浏览:1326 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:539 |
【出圈】 (C语言代码)浏览:794 |
C语言训练-阶乘和数* (C语言代码)-------- 呆板写法浏览:1345 |
WU-拆分位数 (C++代码)浏览:779 |
关于C语言变量位置的问题浏览:272 |
矩形面积交 (C++代码)浏览:1127 |
早早早羊早草草 2022-01-18 16:01:13 |
老哥虽然可能你不会再看了,我把 i <= 1000000改成 i < 1000000就过了,虽然不确定原理是什么,希望有大佬能解答
早早早羊早草草 2022-01-18 16:08:55 |
抱歉,我傻了,因为数组最大是1000000,所以最大下标应该是999999,解决了