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语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:583 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:594 |
【蟠桃记】 (C语言代码)浏览:648 |
【出圈】 (C语言代码)浏览:794 |
A+B for Input-Output Practice (III) (C语言代码)浏览:569 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:640 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:526 |
剪刀石头布 (C语言代码)浏览:748 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:1456 |
Tom数 (C语言代码)浏览:724 |
早早早羊早草草 2022-01-18 16:01:13 |
老哥虽然可能你不会再看了,我把 i <= 1000000改成 i < 1000000就过了,虽然不确定原理是什么,希望有大佬能解答
早早早羊早草草 2022-01-18 16:08:55 |
抱歉,我傻了,因为数组最大是1000000,所以最大下标应该是999999,解决了