天天看點

【ZZULIOJ】1122: 小明的調查作業ZZULIOJ題解

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;
}
           

繼續閱讀