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; }