列表

详情


MT11. 丢失的三个数

描述

现在有一个数组,其值为从 1 到 10000 的连续增长的数字。出于某次偶然操作,导致这个数组中丢失了某三个元素,同时顺序被打乱,现在需要你用最快的方法找出丢失的这三个元素,并且将这三个元素根据从小到大重新拼接为一个新数字,计算其除以 7 的余数。 例:丢失的元素为336 ,10 ,8435 ,得到的新数字为 103368435 ,除以七的余数为 2 。

输入描述

输入数据为一行,包含9997个数字,空格隔开。

输出描述

输出为一行,包含一个数字。

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-09-10

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    int data[10001]={0};
    int d=0;
    int i=0;
    int j=0;
    int a[3]={0};
    long sum=0;
    int yu=0;
   for(i=1;i<9998;i++)
    {
        scanf("%d",&d);
        data[d]=d;
    }
    for(i=1;i<9998;i++)
    {
        if(data[i]<1)
        {
            a[j]=i;
            j++;
        }
        if(j==3)
            break;
    }  
    sum=a[0];
    for(i=1;i<3;i++)
    {
        if(a[i]>0 && a[i]<10)
            sum=sum*10+a[i];
         
        if(a[i]>9 && a[i]<100)
            sum=sum*100+a[i];
         
        if(a[i]>99 && a[i]<1000)
            sum=sum*1000+a[i];
         
         if(a[i]>999 && a[i]<10000)
            sum=sum*10000+a[i];
         
         if(a[i]==10000)
            sum=sum*100000+a[i];
    }
    yu=sum%7;
    printf("%d\n",yu);
    return 0;
}

C++ 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2017-09-12

#include<string>
#include<algorithm>
#include<vector>
#include<iostream>
#include<sstream>

using namespace::std;

int a[10001]={0};
int main()
{
    int i,j;
    int x;
    for(i=0;i<9997;i++)
    {
        scanf("%d",&x);
        a[x]=1;
    }
    string res=" ",s;
    long long sum=0;
    for(j=0;j<10000;j++)
    {
        if(a[j]==0)
        {
        stringstream ss;
        ss<<j;
            ss>>s;
            res+=s;
        }
    }
    stringstream ss;
    ss<<res;
    ss>>sum;
    printf("%d",sum%7);
}
    

C++ 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2017-09-07

#include<stdio.h>
#include<string>
#include<sstream>
using namespace std;
int book[10001];
int main(){
	int x, i;
	for (i = 0; i<9997; i++){
		scanf("%d", &x);
		book[x] = 1;
	}
	long long sum = 0;
	string res = "", s;
	
	for (i = 1; i <= 10000; i++)
		if (book[i] == 0){
			stringstream stream;
			stream << i; 
			stream >> s;
			res += s;
		}
	stringstream ss;
	ss<<res;
	ss >> sum;
	printf("%d\n", sum % 7);
}

C++ 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2017-09-06

#include <iostream>

using namespace std;
#include<iostream>
#include<string>
#include<sstream>
int main()
{
	int barrel[10001] = { 0 };
	int lost[3] = { 0 };
	int i = 0;
	for (int i = 0; i < 9997; i++)
	{
        int input;
        scanf("%d",&input);
        barrel[input]++;
	}
	long long sum;
	string res="",s;
    for (int i = 1; i <=10000; i++)
	{
		if (barrel[i] == 0)
		{
			stringstream ss;
            ss<<i,ss>>s;
            res+=s;
		}
	}
	stringstream ss(res);
    ss>>sum;
    cout<<sum%7;
	return 0;
}

C 解法, 执行用时: 3ms, 内存消耗: 304KB, 提交时间: 2021-12-14

#include <stdio.h>
#include <assert.h>
#define N 10000
int main(void)
{
    int num;
    while(scanf("%d", &num) != EOF)
    {
        assert(num>0 && num<=N);
        char arr[ N+1 ] = {0};
        arr[num] = 1;
        for(int i=1,i_end=N-3,val; i<i_end; ++i){
            scanf("%d", &val);
            assert(val>0 && val<=N);
            assert( !arr[val] );
            arr[val] = 1;
        }
        int record[3], idx = 0;
        for(int i=1; i<=N; ++i)
            if( !arr[i] )
                record[ idx++ ] = i;
        long long new_num = record[0];
        for(int i=1; i<3; ++i){
            int j = record[i];
            while(j)
            {
                new_num *= 10;
                j /= 10;
            }
            new_num += record[i];
        }
        printf("%d\n", new_num % 7);
    }
    return 0;
}

上一题