解题思路:
我们可以定义一个b[1000001]并全部置0(直接等于0就行了或者用<string.h>头文件下的memset(b,0,sizeof(b)));用来存储每一个数出现的次数,比如输入了一个 6,就执行b[6]++;接着输入 123,就执行b[123]++;再输入6,执行b[6]++; 到目前为止,b数组存的是对应下标数字出现的次数,那么输入完,只用判断b数组元素不为0的就打印; 这里我们不用考虑顺序,其实输出就是有序输出的, 我们刚说,数组下标就是对应输入的数字,数组下标肯定是有序的(从小到大),下标对应位置存储的就是,和数组下标相同的数字的个数。
还有不懂得可以留言,我最近三个月内,每天都在。
注意事项:
定义数组时,放在main()外面;因为数组太大,会导致栈溢出的。
参考代码:
#include <stdio.h> int n, a[1001]={0},b[1000001]={0}; int main() { scanf("%d", &n); for(int i = 0; i < n; ++i) { scanf("%d", &a[i]); b[a[i]]++; } for(int i = 0; i < 1000001; ++i) { if(b[i] != 0) { printf("%d %d\n", i, b[i]); } } return 0; }
0.0分
3 人评分
#include<stdio.h> #include <string.h> int main() { int n,i,max=0; long long x, a[1000], book[1000000] = {0}; scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%d", &a[i]); if (a[i] > max) max = a[i]; } for (i = 0; i < n; i++) { book[a[i]]++; } for (i = 0; i <= max; i++) { if (book[i] != 0) printf("%d %lld\n", i, book[i]); } return 0; } 获取 最大的元素max 可以减少标记数组book的循环次数
C二级辅导-计负均正 (C语言代码)浏览:508 |
永远的丰碑 (C语言代码)浏览:653 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1514 |
弟弟的作业 (C++代码)浏览:1295 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:724 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:850 |
校门外的树 (C语言代码)浏览:956 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:500 |
1642题解浏览:708 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:441 |