牛客网—丢失的三个数
程序员文章站
2024-03-16 17:40:34
...
题目描述
现在有一个数组,其值为从1到10000的连续增长的数字。出于某次偶然操作,导致这个数组中丢失了某三个元素,同时顺序被打乱,现在需要你用最快的方法找出丢失的这三个元素,并且将这三个元素根据从小到大重新拼接为一个新数字,计算其除以7的余数。 例:丢失的元素为336,10,8435,得到的新数字为103368435,除以七的余数为2。
输入描述:
输入数据为一行,包含9997个数字,空格隔开。
输出描述:
输出为一行,包含一个数字。
示例1
输入
同题设例子输入
输出
2
思路:通过设置一个数组,如果输入的数据出现了某个数字,就改变以该数字为下标的数组元素的值,使得找出缺失的三个数的效率比较高,然后将三个数从小到大排序,再利用stringsteam容器将三个数字转化为字符串,然后把三个数字连接在一起,再转化为数字对7求余,得到结果。
代码:
#include <iostream>
#include <cstdlib>
#include <sstream>
#include <string.h>
#include <cmath>
#include <malloc.h>
using namespace std;
int main(void){
bool arr[10001];
memset(arr,false,sizeof(arr));//初始值都为false
for(int i=0;i<9997;i++){
int num;
cin>>num;
arr[num-1]=true;//出现该值,就把对应的元素改为true
}
int num[3];
int i=0;
for(int j=0;j<10000;j++)//找出三个缺失的数,跳出循环
{
if(!arr[j]){
num[i]=j+1;
i++;
}
if(i==3){
break;
}
}
if(num[0]>num[1]){//排序
int temp=num[0];
num[0]=num[1];
num[1]=temp;
}
if(num[0]>num[2]){
int temp=num[0];
num[0]=num[2];
num[2]=temp;
}
if(num[1]>num[2]){
int temp=num[1];
num[1]=num[2];
num[2]=temp;
}
long long sum;//存放连接而成的数字
stringstream ss;//定义容器
string str;
ss<<num[0];//每转换一个,就把转换的字符串连接到之前的后面
ss<<num[1];
ss<<num[2];
str=ss.str();//将ss内的字符串取出
stringstream ss1(str);//用str的字符串重新定义一个stringsteam容器
ss1>>sum;//将ss1内的字符串转化为数值,赋值给sum
cout<<sum%7<<endl;
return 0;
}
推荐阅读
-
牛客网—丢失的三个数
-
丢失的三个数 (Java实现)
-
牛客网刷题java之在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
-
牛客网暑期ACM多校训练营(第三场)# E-Sort String (next数组的应用)H Diff-prime Pairs
-
牛客网暑期ACM多校训练营(第三场) H Diff-prime Pairs
-
牛客练习赛8 A 约数个数的和 【数论水题】
-
牛客想开了大赛二--n的约数(求在[1,n]内约数个数最多的数的约数个数)
-
牛客网-剑指offer[编程题]二进制中1的个数 js详解
-
北京大学复试上机 坠落的蚂蚁(牛客网)王道机试指南习题2.11
-
【牛客网】删除字符串中出现次数最少的字符后的字符串