資訊奧賽課課通(C++)p165-2明明的隨機數
阿新 • • 發佈:2018-12-10
明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了N個1到1000之間的隨機整數(N≤100),對於其中重複的數字,只保留一個,把其餘相同的數去掉,不同的數對應著不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成“去重”與“排序”的工作。 輸入格式: 輸入有2行,第1行為1個正整數N,表示所生成的隨機數的個數: N 第2行有N個用空格隔開的正整數,為所產生的隨機數。 輸出格式: 輸出也是2行,第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 說明 NOIP 2006 普及組 第一題
#include<iostream> #include<cmath> using namespace std; int main(){ int a[101],i,n,k,j,t,count; cin>>n; for(i=1;i<=n;i++) cin>>a[i]; for(i=2;i<=n;i++) { //插入法排序 k=i; j=i; while(a[i]<a[k-1]&&k>1) k--; t=a[i]; for(j=i;j>k;j--) a[j]=a[j-1]; a[k]=t; } count=1; for(i=2;i<=n;i++) { if(a[i]!=a[i-1]) count++; } //以上for迴圈統計不同數字有幾個 cout<<count<<endl; cout<<a[1]<<" "; for(i=2;i<=n;i++) { if(a[i]!=a[i-1]) cout<<a[i]<<" "; } //按順序輸出不同的數字 return 0; }