這是一道很簡單的題,但是在**提交時出現了re(執行錯誤),以此記錄,同時還學習到了兩種優秀的題解也一併放上。
明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了n個1到1000之間的隨機整數(n≤100),對於其中重複的數字,只保留乙個,把其餘相同的數去掉,不同的數對應著不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成「去重」與「排序」的工作。
輸入格式
輸入有兩行,第1行為1個正整數,表示所生成的隨機數的個數n
第2行有n個用空格隔開的正整數,為所產生的隨機數。
輸出格式
輸出也是兩行,第1行為1個正整數m,表示不相同的隨機數的個數。
第2行為m個用空格隔開的正整數,為從小到大排好序的不相同的隨機數。
輸入輸出樣例
輸入 #1
10
2040
3267
4020
89300
40015
輸出 #1
8
1520
3240
6789
300400
首先說我錯誤的以及修改部分
所以題目其實就是分為兩個部分排序+刪除
所以我很快就書寫了乙份選擇排序+迴圈刪除鄰位重複的**
有問題的兩個部分如下
1.主函式
int
main()
2.刪除函式
void
deletenum
(int arr,
int&num)
}return
;}
**提交的執行結果如下圖(大紅大紫)
第一組測試資料本地並沒有問題給出的卻是re
於是我注意到了上面兩個部分,首先是刪除,當我刪除重複值時如果遇到連續多個相同2
2232
23當arr[i]等於第乙個2時,根據函式會刪除第二個2,把第三個2放到第二個2的位置
然後i++ 就不會再判定第乙個2與第三個2的重複了,而是考慮2與3是否重複了
所以只需要加上乙個刪除後讓i減減即可。
void
deletenum
(int arr,
int&num)
}return
;}
此時提交如下圖(紫的依舊紫)
這說明是陣列結構問題很可能是new空間引起的執行錯誤
int
main()
修改為arr[1000]後就正確了
接下來為兩種高效題解
一. set容器
set是數學中的集合,本來就不包括重複數字,而且滿足從小到大
我居然沒想到。
**如下 簡潔高效
主要注意迭代器輸出部分就行了
#include
using
namespace std;
intmain()
cout<
size()
<
for(flag=arr.
begin()
;flag!=arr.
end(
);flag++
) cout<
return0;
}
二. 桶排序法
很長時間沒有打**了,連最簡單的桶排序也都忘了
桶就相當於乙個計數陣列 開闢資料空間來標記每個數出現了多少次
輸出時候只需要輸出計數不是0的桶號不就行了
直接定義1001個桶計數(包含0-1000共1001個不同數)
不就簡單方便的完成了嗎?
#include
using
namespace std;
intmain()
;//初始化桶
for(
int i=
0;i)for
(int i=
0;i<=
1000
;i++
) cout<
for(
int i=
0;i<=
1000
;i++
) cout<
return0;
}
最後是自己最早寫的憨憨解法完整版:選擇排序+迴圈刪除#include
using
namespace std;
void
selectsort
(int arr,
int num)
int temp=arr[i]
; arr[i]
=arr[min]
; arr[min]
=temp;
}return;}
void
deletenum
(int arr,
int&num)
}return;}
void
print_arr
(int arr,
int num)
intmain()
P1059 明明的隨機數
題目描述 明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了n個1到1000之間的隨機整數 n 100 對於其中重複的數字,只保留乙個,把其餘相同的數去掉,不同的數對應著不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成 去重 ...
P1059 明明的隨機數
題目描述 明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了nn個11到10001000之間的隨機整數 n 100 n 100 對於其中重複的數字,只保留乙個,把其餘相同的數去掉,不同的數對應著不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。...
P1059 明明的隨機數
明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了nn個11到10001000之間的隨機整數 n 100 n 100 對於其中重複的數字,只保留乙個,把其餘相同的數去掉,不同的數對應著不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明...