明明的随机数冒泡排序c 语言,NOIP复赛 c++-明明的随机数(算法和原码参考)
問題描述-明明的隨機數(shù)】明明想在學(xué)校中請一些同學(xué)一起做問卷調(diào)查,為了實驗的客觀性,他先用計算機生成了N?個1?到1000?之間的隨機整數(shù),(N≤100),對于其中重復(fù)的數(shù)字,只保留一個,把其余相
同的數(shù)去掉,不同的數(shù)對應(yīng)著不同的學(xué)生的學(xué)號。然后再把這些數(shù)從小到大排序,按照排好
的順序去找同學(xué)做調(diào)查。請你協(xié)助明明完成“去重”與“排序”的工作。
【輸入文件】
輸入文件random.in?有2?行,第1?行為1?個正整數(shù),表示所生成的隨機數(shù)的個數(shù):N
第二行有N?個用空格隔開的正整數(shù),為所產(chǎn)生的隨機數(shù)。
【輸出文件】
輸出文件random.out?也是2?行,第1?行為1?個正整數(shù)M,表示不相同的隨機數(shù)的個數(shù)。
第2?行為M?個用空格隔開的正整數(shù),為從小到大排好序的不相同的隨機數(shù)。
【輸入樣例】
10
20 40 32 67 40 20 89 300 400 15
【輸出樣例】
8
15 20 32 40 67 89 300 400
/*本題主要是考察對排序算法的掌握,只不過外加了一個去重的操作。本題的算法有很多,我們在考試時,時間緊,題目難度大。如果我們能用最簡單的思維方式解決問題的話,就不一定把很多的時間放在代碼執(zhí)行效率的優(yōu)化問題上。有時候犧牲一點空間(內(nèi)存)和時間對于獲取更多的考試時間是非常有必要的。本題最簡單的思想方法,就是根據(jù)題目要求,先對給定的一組數(shù)據(jù)進行排序,排序的方法可以使用最簡單的冒泡算法來完成。由于本題的輸出結(jié)果要求我們必須先統(tǒng)計出不重復(fù)數(shù)據(jù)的個數(shù),所以當(dāng)數(shù)據(jù)排序之后,我們可以先對所有的數(shù)據(jù)遍歷一次,這一次遍歷的目的就是讓我們統(tǒng)計出不重復(fù)數(shù)據(jù)的個數(shù),并將其輸出。最后,我們還需進行一次遍歷,這次遍歷用于打印出排序之后不重復(fù)的所有數(shù)據(jù)結(jié)果.
*/
#include
int main()
{
FILE *fp1,*fp2;
int N,M=0;
int i,j;
int a;
int num[100];?//根據(jù)題目所給的數(shù)據(jù)規(guī)模定義數(shù)組的大小??? if((fp1=fopen(“random.in”,”r”))==NULL)
{
printf(“cannot open file\n”);
return 0;
}
fscanf(fp1,”%d”,&N);?//輸入隨機數(shù)的個數(shù)
for(i=0;i
fscanf(fp1,”%d”,&num[i]);?//將已知的隨機數(shù)存放到初始數(shù)組中
for(i=0;i
for(j=i+1;j
{
if(num[i]>num[j])
{
a=num[i];
num[i]=num[j];
num[j]=a;
}
}
fp2=fopen(“random.out”,”w”);?//打開寫文件的指針
for(i=0;i
{
if(i>0&&num[i]==num[i-1])?//思考一下這個去重的操作中為什么有i>0這個條件????????? continue;
M++;
}
fprintf(fp2,”%d\n”,M);?//在結(jié)果文件中打印出不重復(fù)數(shù)據(jù)的個數(shù) 并鍵入一個回車符
for(i=0;i
if(i>0&&num[i]==num[i-1])?//思考一下這個去重的操作中為什么有i>0這個條件
continue;
fprintf(fp2,”%d “,num[i]);
}
fclose(fp1);
fclose(fp2);
return 0;
}
http://www.gzkg.net/show.aspx?id=117&cid=356
總結(jié)
以上是生活随笔為你收集整理的明明的随机数冒泡排序c 语言,NOIP复赛 c++-明明的随机数(算法和原码参考)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OJ1001: 植树问题
- 下一篇: ZZULIOJ 1101: 逆序数字(函