一、明明的隨機數答案
明明的隨機數是一道經典的算法問題。題目要求輸入一個長度為n的正整數數列,隨機選取其中的若干個數,去重後輸出這些數字,且按照升序排列。我們可以用set數據結構實現去重,再用sort函數排序即可。
// C++代碼示例
#include<set>
#include<algorithm>
#include<iostream>
using namespace std;
int main(){
int n;
cin >> n;
set<int> s;
for(int i=0;i<n;i++){
int x;
cin >> x;
s.insert(x);
}
cout << s.size() << endl;
for(auto x: s){
cout << x << " ";
}
return 0;
}
二、明明的隨機數python3
Python3中可以直接用set去重,再轉為列表。由於set自動去重和內部的排序規則,代碼實現起來非常簡單。
# Python3代碼示例
n = int(input())
s = set(map(int, input().split()))
ans = list(s)
ans.sort()
print(len(ans))
print(*ans)
三、明明的隨機數c語言
C語言沒有set這種現成的數據結構,需要手動實現去重。我們可以用循環遍歷整個數組,判斷是否有重複元素。為了快速判斷元素是否存在,可以用標記法,將元素和下標對應,出現過的元素對應的下標位置標記為1,後續再出現這個元素時,直接判斷該元素對應的下標是否為1,如果為1則為重複元素,跳過即可。
// C語言代碼示例
#include<stdio.h>
#include<stdlib.h>
int a[1001];
int main(){
int n;
scanf("%d", &n);
for(int i=0;i<n;i++){
int x;
scanf("%d", &x);
a[x]=1;
}
int cnt=0;
for(int i=1;i<=1000;i++){
if(a[i]){
cnt++;
}
}
printf("%d\n", cnt);
for(int i=1;i<=1000;i++){
if(a[i]){
printf("%d ", i);
}
}
return 0;
}
四、明明的隨機數c
C語言中也可以使用標記法實現去重,只需要定義一個數組來存儲元素是否出現過即可。
// C代碼示例
#include<stdio.h>
#include<stdlib.h>
int a[1001];
int main(){
int n;
scanf("%d", &n);
for(int i=0;i<n;i++){
int x;
scanf("%d", &x);
a[x]=1;
}
int cnt=0;
for(int i=1;i<=1000;i++){
if(a[i]){
cnt++;
}
}
printf("%d\n", cnt);
for(int i=1;i<=1000;i++){
if(a[i]){
printf("%d ", i);
}
}
return 0;
}
五、明明的隨機數標記法c語言
在c語言中,可以使用標記法對元素進行去重。我們定義一個數組a來存儲每個元素是否出現過,初始值為0。遍歷輸入的序列時,若該元素尚未出現過,則將其對應的a數組下標標記為1。
// c語言代碼示例
#include<stdio.h>
#include<stdlib.h>
int a[1001];
int main(){
int n;
scanf("%d", &n);
for(int i=0;i<n;i++){
int x;
scanf("%d", &x);
a[x]=1;
}
int cnt=0;
for(int i=1;i<=1000;i++){
if(a[i]){
cnt++;
}
}
printf("%d\n", cnt);
for(int i=1;i<=1000;i++){
if(a[i]){
printf("%d ", i);
}
}
return 0;
}
六、明明的隨機數c++語言
C++語言可以使用set容器或者unordered_set容器實現去重。set容器自動按升序進行排序,而unordered_set容器則具有O(1)的快速查找和插入特性。
// C++代碼示例
#include<set>
#include<iostream>
using namespace std;
int main(){
int n;
cin >> n;
unordered_set<int> s;
for(int i=0;i<n;i++){
int x;
cin >> x;
s.insert(x);
}
cout << s.size() << endl;
for(auto x: s){
cout << x << " ";
}
return 0;
}
七、明明的隨機數先去重c語言
在c語言中,除了使用標記法進行去重之外,還可以先將輸入的序列排序,再掃描一遍進行去重。這個方法在元素值很大的情況下可能不太適用。
// c語言代碼示例
#include<stdio.h>
#include<stdlib.h>
int a[1001];
int cmp(const void* a, const void* b){
return *(int*)a-*(int*)b;
}
int main(){
int n;
scanf("%d", &n);
int ans[1001], cnt=0;
for(int i=0;i<n;i++){
scanf("%d", &a[i]);
}
qsort(a, n, sizeof(int), cmp);
for(int i=1;i<n;i++){
if(a[i]!=a[i-1]){
ans[cnt++]=a[i];
}
}
ans[cnt++]=a[n-1];
printf("%d\n", cnt);
for(int i=0;i<cnt;i++){
printf("%d ", ans[i]);
}
return 0;
}
八、明明的隨機數格式錯誤
在輸入數據時,可能會出現格式錯誤的情況,比如換行符被輸入到了數字中,或者輸入了非數字字符等。我們可以通過檢查每個數字是否合法,即是一個正整數且在1~1000範圍之內,來解決格式錯誤的問題。
// c++代碼示例
#include<iostream>
#include<set>
#include<string>
using namespace std;
int main(){
int n;
cin >> n;
set<int> ans;
string s;
getline(cin, s);
for(int i=0;i<n;i++){
getline(cin, s);
int x=0, flag=1;
for(int j=0;j<s.size();j++){
if(s[j]'9'){
flag=0;
break;
}
x=x*10+s[j]-'0';
if(x>1000){
flag=0;
break;
}
}
if(flag){
ans.insert(x);
}
}
cout << ans.size() << endl;
for(auto x: ans){
cout << x << " ";
}
return 0;
}
九、明明的隨機數洛谷
在洛谷上,明明的隨機數問題存在一些約束:輸入數字的範圍是1~10000,樣例數目不超過10個,每個樣例中元素的個數不超過1000個等。可以參考下面的代碼實現。
// c++代碼示例
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> ans;
for(int i=0;i<n;i++){
int k;
cin >> k;
vector<int> a(k);
for(int i=0;i<k;i++){
cin >> a[i];
}
sort(a.begin(), a.end());
a.erase(unique(a.begin(), a.end()), a.end());
for(auto x: a){
ans.push_back(x);
}
}
sort(ans.begin(), ans.end());
ans.erase(unique(ans.begin(), ans.end()), ans.end());
cout << ans.size() << endl;
for(auto x: ans){
cout << x << " ";
}
return 0;
}
十、明明的隨機數c語言查重該怎麼辦
對於c語言,我們可以使用標記法進行查重。讀入每個數字時,如果在這個數字之前出現過,即已經被標記為1,則說明是重複的數字,直接跳過即可。
// c語言代碼示例
#include<stdio.h>
#include<stdlib.h>
int a[1001];
int main(){
int n;
scanf("%d", &n);
for(int i=0;i<n;i++){
int x;
scanf("%d", &x);
if(a[x]==0){
a[x]=1;
}
else{
continue;
}
printf("%d ", x);
}
return 0;
}
原創文章,作者:MSAY,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/142556.html