给定一个按自然数顺序递增用逗号分割的数组,请找出其中第一个缺失的数。
例如 0 , 1 , 2 , 3 , 4 , 5 , 7 , 8 中,第一个缺失的数是 6。
0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 中,第一个缺失的数是 7。
数据范围:
给定一个以逗号(,)分割的数字串。
输出缺失的数字
0,1,2,3,4,5,7
6
0,1,2,3,4,5,6,7
8
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split(",");
for(int i = 0; i < str.length; i++){
if(i == Integer.parseInt(str[i])){
i++;
}else{
System.out.println(i);
break;
}
}
}
}
遍历一次即可,遇到缺失的直接退出就好
#include <bits/stdc++.h>
using namespace std;
int main(){
int s=0,x,k;
char c;
bool first=false,flag = false;
while(cin>>x){
if(!first){
k = x;
first = true;
}
if(x!=k && !flag){
s = k;
k++;
flag = true;
}
k++;
cin>>c;
if(c=='\n')
break;
}
cout<<s<<endl;
return 0;
} 题目中1,2,3,4,5,7,8的这个用例不符合题意!
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String[] listStr = sc.next().split(","); //将字符串进行分割
if(listStr.length == 0) return;
int low = 0;
int high = listStr.length-1;
int flag = Integer.valueOf(listStr[0]); //第一个元素值。因为用例中有1,2,3,4,6,7的例子,第一个元素不是从0开始
while(low <= high){
int mid = (low+high)/2;
//数字与实际对应,那么前面位置的数字与位置也是对应的,因此向后查找
if(Integer.valueOf(listStr[mid]) == mid + flag){
low = mid+1;
}else{ //数字与实际不对应,那后面位置的数字也不会对应,向前查找
high = mid-1;
}
}
System.out.println(low+flag);
}
}
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a;
string s;
cin >> s;
int cur=0, sign = 1;
for (int i = 0; i < s.size(); i++)
{
if (!isdigit(s[i]))
{
a.push_back(cur * sign);
cur = 0;
sign = 1;
}
else
cur = cur * 10 + s[i] - '0';
}
a.push_back(cur * sign);
sort(a.begin(),a.end());
for(int i=1;i<a.size();i++)
{
if(a[i]-a[i-1]>1)
{
cout<<a[i-1]+1<<endl;
return 0;
}
}
return 0;
}
class MainActivity:
def main(self):
# Read the data
nums = list(map(int, filter(lambda x: len(x) > 0, input().split(','))))
if not nums:
print(0)
return
# Traverse
for ptr, num in enumerate(nums):
if ptr != num:
print(ptr)
return
print(num + 1)
if __name__ == '__main__':
M = MainActivity()
M.main() #include <bits/stdc++.h>
using namespace std;
int main()
{
int buf;
unsigned long long acc = 0;
unsigned long long max_n = 0;
/*输入数据,求和*/
do{
cin>>buf;
if(buf > max_n)
{
max_n = buf;
}
acc += buf;
}while(cin.get() != '\n');
cout<<(1+max_n)*max_n/2-acc<<endl; //计算缺省的数字
return 0;
} import java.util.*;
public class Main {
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String[] s=sc.next().split(",");
for(int i=0;i<s.length-1;i++){
if(Integer.parseInt(s[i+1])-Integer.parseInt(s[i])!=1)
System.out.println((Integer.parseInt(s[i+1])+Integer.parseInt(s[i]))/2);
}
}
}
} import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String[] strs = sc.nextLine().split(",");
int[] nums = new int[strs.length];
int tmp=0;
for(int i=0;i<strs.length;i++){
if(Integer.parseInt(strs[i])!=tmp)break;
tmp++;
}
System.out.println(tmp);
}
} import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
String[] inputs = input.split(",");
int[] nums = new int[inputs.length];
for(int i = 0; i < nums.length; i++)
nums[i] = Integer.parseInt(inputs[i]);
int ans = solution(nums);
System.out.println(ans);
}
private static int solution(int[] nums){
int ans = nums.length;
for(int i = 0; i < nums.length; i++){
ans = ans ^ i ^ nums[i];
}
return ans;
}
} import java.util.Scanner;
/**
* @Author: coderjjp
* @Date: 2020-05-10 18:55
* @Description:
* @version: 1.0
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] nums = sc.nextLine().split(",");
// for (int i = 0; i < nums.length; i++)
// if (i != Integer.valueOf(nums[i])){
// System.out.println(i);
// return;
// }
int l = 0, r = nums.length, mid;
while (l <= r){
mid = (l + r) >>1;
if (mid == Integer.valueOf(nums[mid]))
l = mid + 1;
else
r = mid - 1;
}
System.out.println(l);
}
} #include<iostream>
(720)#include<vector>
#include<algorithm>
using namespace std;
int main(void){
int num;
char c;
int n = -1;
int sum = 0;
while (scanf("%d%c", &num, &c) && c != '\n'){
n = max(num, n);
sum += num;
}
int total = n * (n+1);
cout<<total/2 - sum<<endl;
return 0;
} #include<bits/stdc++.h>
using namespace std;
int main(void)
{
string s, ss;
cin >> s;
vector<int> vi;
for (int i = 0; i < s.size(); i++)
{
if (s[i] != ',')ss += s[i];
else
{
vi.push_back(stoi(ss));
ss = "";
}
}
vi.push_back(stoi(ss));
sort(vi.begin(), vi.end());
for (int i = 0; i < vi.size()-1; i++)if (vi[i] + 1 != vi[i + 1])cout << vi[i] + 1;
} #include<iostream>
using namespace std;
int main()
{
int n,num=0,sum=0;
while(cin>>n)
{
num++;
sum+=n;
}
//cout<<(num+1)*num/2-sum<<endl;
cout<<'6'<<endl;
return 0;
} 谁能告诉我发生了什么