列表

详情


CMB1. 序列找数

描述

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

输入描述

输入为n+1个非负整数,用空格分开。
其中:首个数字为非负整数序列的最大值n,后面n个数字为子序列中包含的数字。

输出描述

输出为1个数字,即未出现在子序列中的那个数。

示例1

输入:

3 3 0 1

输出:

2

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 224KB, 提交时间: 2018-08-10

#include"stdio.h"
int main()
{
    int a;
    int b[10000];
    int i=0,j=0;
    scanf("%d",&a);
    for(i=0;i<a;i++)
        scanf("%d",&b[i]);
    int min,temp;
    for(i=0;i<a;i++)
    {
        min=b[i];
        for(j=i+1;j<a;j++)
            if(b[j]<min)
            {
                temp=b[j];
                b[j]=min;
                min=temp;
            }
        b[i]=min;
    }
    for(i=0;i<a;i++)
        if(b[i]!=i)
        {
            printf("%d",i);break;
        }
}

C 解法, 执行用时: 1ms, 内存消耗: 292KB, 提交时间: 2021-09-10

#include <stdio.h>

int minNumberdisappered(int* arr, int arrLen ) {
    int sz[100]={0};
    int i;
    for(i=0;i<arrLen;i++)
    {
        if(arr[i]<0 || arr[i]>arrLen)
            continue;
        else
        {
            sz[arr[i]]++;
        }
    }
    for(i=0;i<100;i++)
    {
        if(sz[i]==0)
            return i;
    }
    if(sz[0]!=0)
        return arrLen;
    else
        return arrLen+1;
}

int main()
{
    int arr[100];
    int index=0,num;
    while(scanf("%d",&num)!=EOF)
    {
        arr[index++]=num;
    }
    printf("%d\n",minNumberdisappered(arr,index));
    return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 304KB, 提交时间: 2020-07-07

#include <stdio.h>
#include <stdlib.h>

int main(void) {
	int n,i,tmp;
	scanf("%d",&n);
	int a[n+1];
    memset(a,0,(n+1)*sizeof(int));
	for(i=0;i<n;i++)
	{
		scanf("%d",&tmp);
		a[tmp]++;
	}
	for(i=0;i<n+1;i++)
	{
		if(a[i]==0)
		{
			printf("%d",i);
			return 0;
		}
	}
}

C++14 解法, 执行用时: 1ms, 内存消耗: 364KB, 提交时间: 2020-08-17

#include<stdio.h>
#include<string.h>
using namespace std;
int main(){
    int n,sum=0,sum1=0;
    scanf("%d",&n);
    for(int i=0;i<=n;i++){
        sum+=i;
    }
    for(int i=0;i<n;i++){
        int temp;
        scanf("%d",&temp);
        sum1+=temp;
    }
    printf("%d\n",sum-sum1);
    return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 364KB, 提交时间: 2020-07-21

#include <stdio.h>
int main(void)
{
    int no;
    scanf("%d", &no);
     
    int nums[no];
    int i = 0;
    int sum=0,sum1=0;
    for (i = 0; i < no; i++)
    {
        scanf("%d", &nums[i]);
        sum+=nums[i]  ; 
    }
    sum1=no*(no+1)/2;
    
    printf("%d",sum1-sum);

 
    return 0;
}

上一题

下一题