1.題目描述
從非負(fù)整數(shù)序列 0, 1, 2, ..., n 中給出包含其中 n 個數(shù)的子序列,請找出未出現(xiàn)在該子序 列中的那個數(shù)。
- 輸入描述:
輸入為 n+1 個非負(fù)整數(shù),用空格分開。
其中:首個數(shù)字為非負(fù)整數(shù)序列的最大值 n,后面 n 個數(shù)字為子序列中包含的數(shù)字。 - 輸出描述:
輸出為 1 個數(shù)字,即未出現(xiàn)在子序列中的那個數(shù)。 - 輸入示例:
3 3 0 1 - 輸出示例:
2
2.題目解析
最簡單的方式就是兩層循環(huán)嵌套,進(jìn)行查找。
3.參考答案
#include <bits/stdc++.h>
using namespace std;
int main() {
int n = 0;
scanf("%d",&n);
int nums[n];
fill_n(nums,n,0);
for(int i=0;i<n;++i){
scanf("%d",&nums[i]);
}
for(int i=0;i<=n;++i){
bool has = false;
for(int j=0;j<n;++j){
if(i == nums[j]){
has = true;
break;
}
}
if(has == false){
printf("%d\n",i);
break;
}
}
return 0;
}
使用STL的find()簡化
#include <bits/stdc++.h>
using namespace std;
int main() {
int n = 0;
scanf("%d",&n);
int nums[n];
fill_n(nums,n,0);
for(int i=0;i<n;++i){
scanf("%d",&nums[i]);
}
for(int i=0;i<=n;++i){
if(find(nums,nums+n,i) == nums+n){
printf("%d\n",i);
break;
}
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main() {
int n = 0;
scanf("%d",&n);
int sum = 0;
for(int i=0;i<n;++i){
int n = 0;
scanf("%d",&n);
sum += n;
}
int sum_n = 0;
for(int i=0;i<=n;++i){
sum_n += i;
}
printf("%d\n",sum_n - sum);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main() {
int n = 0;
scanf("%d",&n);
int sum = 0;
for(int i=0;i<n;++i){
int n = 0;
scanf("%d",&n);
sum += n;
}
int sum_n = n*(n+1)/2; // 等差數(shù)列求和公式
printf("%d\n",sum_n - sum);
return 0;
}