1. 程式人生 > >資訊奧賽課課通(C++)p165-2明明的隨機數

資訊奧賽課課通(C++)p165-2明明的隨機數

明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了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;
}