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; } 麻烦各位看下哪里错了
字符串输入输出函数 (C++代码)(都当成字符串吧hhhhhhhh)浏览:508 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:643 |
这可能是一个假的冒泡法浏览:1071 |
WU-输入输出格式练习 (C++代码)浏览:1133 |
剪刀石头布 (C语言代码)浏览:802 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:268 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:821 |
K-进制数 (C语言描述,蓝桥杯)浏览:955 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1495 |
格式化数据输出 (C语言代码)浏览:882 |
早早早羊早草草 2022-01-18 16:01:13 |
老哥虽然可能你不会再看了,我把 i <= 1000000改成 i < 1000000就过了,虽然不确定原理是什么,希望有大佬能解答
早早早羊早草草 2022-01-18 16:08:55 |
抱歉,我傻了,因为数组最大是1000000,所以最大下标应该是999999,解决了