ZZULIOJ題解
1122: 小明的調查作業
題目描述
小明的老師布置了一份調查作業,小明想在學校中随機找N個同學一起做一項問卷調查,聰明的小明為了實驗的客觀性,他先随機寫下了N個1到1000之間的整數(0<N≤1000),不同的數對應着不同的學生的學号。但他寫下的數字難免會有重複數字,小明希望能把其餘重複的數去掉,然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成“去重”與“排序”的工作。
輸入
輸入有2行,第1行為1個正整數,表示整數的個數:N.
第2行有N個用空格隔開的正整數,表示小明寫下的N個整數。
輸出
輸出也是2行,第1行為1個正整數M,表示不相同的整數的個數。第2行為M個用空格隔開的正整數,為從小到大排好序的不相同的整數。
樣例輸入
10
20 40 32 67 40 20 89 300 400 15
樣例輸出
8
15 20 32 40 67 89 300 400
這裡使用stl容器會讓問題簡單,當然也有簡單的數組方法來使用。可以首先排序,然後進行計數。并且更改數組。
代碼
#include<stdio.h>
int n,m,i,j,a[1001],t;
//定義數字總量n,中間交換變量t,循環變量j和i
//數字儲存在數組a[],以及不重複數字量m
int main()
{
scanf("%d",&n);
m=n;//先然不重複的數字量等于輸入數字的總量
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);//存入數組
}
//利用冒泡排序進行排序
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]>a[j])//數組排序
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(i=0;i<n;i++)//對于排序後的數組進行處理
{
if(a[i]==a[i+1])//如果有相等的值,讓前一個等于零
{
a[i]=0;
m=m-1;//重複出現,那麼計數值減一
}
}
printf("%d\n",m);//輸出沒有重複的數字個數
for(i=0;i<n;i++)
{
if(a[i]==0)//為零不輸出
continue;
else
printf("%d ",a[i]);
}
getchar();//吸收最後一個空格
return 0;
}