C语言 题目:明明的随机数
第一次写博客,本人大一新生,就读于商丘学院应用科技学院,第一次写自己对题目的见解.题目来自洛谷P1059[NOIP2006 普及组] 明明的随机数参考https://blog.csdn.net/dashenthk/article/details/107351383
题目描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 N 个 1 到 1000 之间的随机整数 (N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入格式
输入有两行,第 1 行为 1 个正整数,表示所生成的随机数的个数 N。
第 2 行有 N 个用空格隔开的正整数,为所产生的随机数。
输出格式
输出也是两行,第 1 行为 1 个正整数 M,表示不相同的随机数的个数。
第 2 行为 M 个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
输入输出样例
输入 #1
10 20 40 32 67 40 20 89 300 400 15
输出 #1
8 15 20 32 40 67 89 300 400
#include<stdio.h> int main() { int a[1001] = { 0 }; //1000以内的随机数,创键1001个数组,防止数据溢出 int i = 0; //输入的数字个数 int b = 0; //去重后输出数字的个数 int n = 0; //输入的数字 scanf_s("%d", &i); for (int x = 0; x < i; x++) { scanf_s("%d", &n); if (a[n] == 0) { //去重 a[n] = n; //为这个数赋值到它所对应的数组比如输入的值是234那就把这个值存到a[234]中 b++; //如果这个数对应的数组有一个值那就跳过了,如果没有值那就赋值 } } printf("%d\n", b); //输出去重后的数字个数 for (int x = 0; x < 1001; x++) { //排序,挨个输出如果为0不输出,不为0输出 if (a[x] != 0) printf("%d ", a[x]); } return 0; }