C 試題 演算法提高 明明的隨機數

2021-10-19 07:41:37 字數 1560 閱讀 1390

資源限制

時間限制:1.0s 記憶體限制:256.0mb

問題描述

明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了n個1到1000之間的隨機整數(n≤100),對於其中重複的數字,只保留乙個,把其餘相同的數去掉,不同的數對應著不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成「去重」與「排序」的工作。

輸入格式

輸入有2行,第1行為1個正整數,表示所生成的隨機數的個數:n

第2行有n個用空格隔開的正整數,為所產生的隨機數。

輸出格式

輸出也是2行,第1行為1個正整數m,表示不相同的隨機數的個數。第2行為m個用空格隔開的正整數,為從小到大排好序的不相同的隨機數。

樣例輸入

1020 40 32 67 40 20 89 300 400 15

樣例輸出

815 20 32 40 67 89 300 400

資料規模和約定

(n≤100)

解題方法:

源程式:

#include

#include

//標頭檔案

using namespace std;

set<

int>

m;void

getdate

(int n)

//輸入

}int

main()

評測結果:

解題方法:

還有一種方法是:使用者每輸入乙個資料,就和該陣列之前的資料對比,這樣每輸入乙個都要遍歷陣列,效率較低。當資料量較小時也是不錯的一種方法。

常見的排序方法有:插入排序,氣泡排序,選擇排序,謝爾排序,快速排序,堆積排序,二路歸併排序,基數排序。

本題目我使用的是謝爾排序,可根據自己喜好選擇對口的排序方法。

源程式:
#include

#include

#include

using namespace std;

int a[

100]

;int length =0;

//去重完畢後的長度

void

distinct

(int n)

//去重函式

;int b[

100]

;//memset(dis, 0, sizeof(dis));//初始化為零

for(

int i =

0; i < n; i++)}

}void

sorting()

//排序函式}}

while

(flag !=0)

;}}void

print()

//輸出

intmain()

評測結果:

筆試題 明明的隨機數

明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了n個1到1000之間的隨機整數 n 1000 對於其中重複的數字,只保留乙個,把其餘相同的數去掉,不同的數對應著不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成 去重 與 排序...

C 明明的隨機數

明明的隨機數 明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了n個1 到1000 之間的隨機整數 n 1000 對於其中重複的數字,只保留乙個,把其餘相同的數去掉,不同的數對應著不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完...

C ,明明的隨機數

明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了n個1到1000之間的隨機整數 n 100 對於其中重複的數字,只保留乙個,把其餘相同的數去掉,不同的數對應著不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成 去重 與 排序 ...