美文网首页
[11]序列找数-招商银行信用卡中心2018秋

[11]序列找数-招商银行信用卡中心2018秋

作者: jdzhangxin | 来源:发表于2018-10-21 18:20 被阅读69次

1.题目描述

从非负整数序列 0, 1, 2, ..., n 中给出包含其中 n 个数的子序列,请找出未出现在该子序 列中的那个数。

  • 输入描述:
    输入为 n+1 个非负整数,用空格分开。
    其中:首个数字为非负整数序列的最大值 n,后面 n 个数字为子序列中包含的数字。
  • 输出描述:
    输出为 1 个数字,即未出现在子序列中的那个数。
  • 输入示例:
    3 3 0 1 
    
  • 输出示例:
    2
    

2.题目解析

最简单的方式就是两层循环嵌套,进行查找。

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; // 等差数列求和公式
   printf("%d\n",sum_n - sum);   
   return 0;
}

牛客题目

相关文章

网友评论

      本文标题:[11]序列找数-招商银行信用卡中心2018秋

      本文链接:https://www.haomeiwen.com/subject/vgedoftx.html