欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

牛客网—丢失的三个数

程序员文章站 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;
}