C小加 之 随机数
描述
ACM隊(duì)的“C小加”同學(xué)想在學(xué)校中請(qǐng)一些同學(xué)一起做一項(xiàng)問卷調(diào)查,為了實(shí)驗(yàn)的客觀性,他先用計(jì)算機(jī)生成了N個(gè)1到1000之間的隨機(jī)整數(shù)(0< N≤100),對(duì)于其中重復(fù)的數(shù)字,只保留一個(gè),把其余相同的數(shù)去掉,不同的數(shù)對(duì)應(yīng)著不同的學(xué)生的學(xué)號(hào)。然后再把這些數(shù)從小到大排序,按照排好的順序去找同學(xué)做調(diào)查。請(qǐng)你協(xié)助 C小加 完成“去重”與“排序”的工作。
輸入
第一行輸入整數(shù)T(1< T<10)表示多少組測(cè)試數(shù)據(jù),
每組測(cè)試數(shù)據(jù)包括2行,
第1行為1個(gè)正整數(shù),表示所生成的隨機(jī)數(shù)的個(gè)數(shù):N(0< N≤100)
第2行有N個(gè)用空格隔開的正整數(shù),為所產(chǎn)生的隨機(jī)數(shù)。
(隨機(jī)數(shù)為題目給定的,不需要ACMer生成)
輸出
輸出也是2行,第1行為1個(gè)正整數(shù)M,表示不相同的隨機(jī)數(shù)的個(gè)數(shù)。
第2行為M個(gè)用空格隔開的正整數(shù),為從小到大排好序的不相同的隨機(jī)數(shù)。
樣例輸入
1
10
20 40 32 67 40 20 89 300 400 15
樣例輸出
8
15 20 32 40 67 89 300 400
代碼如下
#include <stdio.h> #include <string.h> int main() {int a[1001],y,i,x,n,c,k;scanf("%d",&n); //這里的n,控制n組數(shù)據(jù)循環(huán);while(n--){c=0;memset(a,0,sizeof(a)); //這里講數(shù)組a【1001】全部設(shè)為0;scanf("%d",&y); //這里的y,控制y個(gè)數(shù);for(i=0; i<y; i++){scanf("%d",&x); //每次輸入一個(gè)數(shù)x;if(a[x]==1) { //每次c都加一;c++; //c為有幾個(gè)重復(fù)的數(shù);}a[x]=1; //將該數(shù)組下標(biāo)即a【x】定義為1;} //如果有重復(fù)的仍然a【x】為1;printf("%d\n",y-c); //y為一共的數(shù),c為有個(gè)重復(fù)的數(shù),y-c為幾個(gè)不重復(fù)的數(shù);for(i=0; i<1001; i++){if(a[i]==1) //輸入的數(shù)組下標(biāo)的值都為1,其他的都是0;{printf("%d ",i); //輸出數(shù)組下標(biāo)的值是1的數(shù)組;}}printf("\n"); //換行,控制格式的輸出;}return 0; }總結(jié)