首页 > 试题广场 > 找出重复的数字
[编程题]找出重复的数字
一组无序的自然数集合,由0,1,2... ...,n的数字和一个的数字X(X>=0 && X<=n)组成,请从集合中找出这个重复数字X。

输入描述:
空格分割的自然数集合


输出描述:
重复数字
示例1

输入

9 6 4 2 1 3 5 7 0 1 8

输出

1

说明

0,1,2,3,4,5,6,7,8,9 + 1
示例2

输入

3 0 2 2 1

输出

2

说明

0,1,2,3 + 2

bitset随便记录一下吧

#include <bits/stdc++.h>

using namespace std;

const int N = 50;

int n, m, k;

bitset<1000001>a;

int main() {
    while (~scanf("%d", &n)) {
        if (a[n] == 1) {
            printf("%d\n", n);
            return 0;
        }
        a[n] = 1;
    }
}
发表于 2019-07-11 15:57:33 回复(0)
nums = list(map(int,input().split(' ')))
print(sum(nums)-sum(range(len(nums)-1)))
列表是连续的,并且只有一个重复的。所以差值就是重复的那个数咯
发表于 2019-09-16 22:10:35 回复(4)
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    vector<int>num;
    while(cin>>n)
        num.push_back(n);
    for(int i=0;i<num.size()-1;i++)
    {
        for(int j=i+1;j<num.size();j++)
        {
            if(num[i]==num[j])
            {
                cout<<num[i]<<endl;
                return 0;
            }
        }
    }
    return 0;
}

发表于 2019-08-18 23:11:03 回复(0)
涉及重复数字的可以用异或来做,这个比较特殊,也可以用先整体求和,再减去对N求和
nums = list(map(int,input().split()))
x = 0^1
for i in range(2,len(nums)-1):
    x = x^i
for i in nums:
    x = x^i
print(x)
    

发表于 2019-07-25 12:09:45 回复(0)
试试就知道,万能输出重复字符及重复次数!!!
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Iterator;
public class Main{

public static void main(String[] args) throws IOException  {

Scanner s= new Scanner(System.in);
String a= s.nextLine();
String[] b=a.split(" ");
Map<String,Integer> map = new HashMap<String, Integer>();
for(int i =0 ;i<b.length;i++){
if(null!= map.get(b[i])){
map.put(b[i], map.get(b[i])+1); //无序
}
else{
map.put(b[i],1);
}
}

Iterator it = map.entrySet().iterator();
while(it.hasNext()){
Map.Entry entry = (Map.Entry) it.next();
String  key  =  entry.getKey().toString();
int value  =  Integer.parseInt(entry.getValue().toString());
if(value>=2){
System.out.println(key);
//System.out.println("重复的数字(字符)为"+key+"重复的次数"+value);
}

}
}
}

编辑于 2019-07-23 18:54:44 回复(0)
#include <bits/stdc++.h>
usingnamespacestd;
intmain(void){
    inta,n=0;
    charc;
    set<int> s;
    while((cin>>a).get(c)){
        n=s.size();
        s.insert(a);
        if(n==s.size()){
            cout<<a<<endl;
            return0;
        }
        if(c == '\n') break;
    }
    return0;
}

发表于 2019-07-23 10:23:02 回复(0)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{  vector<double> vec1;  double temp;  while (cin >> temp)  {   vec1.push_back(temp);  char c = cin.get();  if (c == '\n')  break;  if (c == ' ')  continue;  }  sort(vec1.begin(), vec1.end());  for (int i = 0; i < vec1.size()-1; i++)  {  if (vec1[i] == vec1[i + 1])  {  cout << vec1[i] << ' ';  for (int temp = vec1[i]; temp == vec1[i]; i++)  {    }  i--;  continue;  }  }  }

编辑于 2019-07-11 21:48:12 回复(1)
    //转化为只有重复的数字出现3次,其他数字出现2次,用异或解决
    unsigned int temp, result = 0, counter = 0;
    while(cin >> temp){
        counter++;
        result ^= temp;
    }
    for(int i = 0; i < counter-1; i++){
        result ^= i;
    }
    
    cout << result << endl;

发表于 今天 13:11:57 回复(0)
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <string>
#include <list>
#include <math.h>
#include <set>
#include <cstdio>
#include <queue>
#include <sstream>
#include <stack>

//#define DBL_MAX 1.7976931348623158e+308

using namespace std;
typedef long long ll;
#define BIG 1000000000
//习惯性带上上面

int main() {
    int n;
    int sum = 0;
    int sum_n = 0;
    int len = 0;
    while (cin >> n) {
        sum += n;
        len++;
    }
    sum_n = (len - 2) * (len - 2 + 1) / 2;

    cout << sum -sum_n << endl;

    return 0;
}


发表于 2019-10-06 13:45:42 回复(0)
#include<iostream>
using namespace std;
 
int main()
{
    long long a[1000001];
    int i=0;
    long sum=0;
    while(cin>>a[i])
    {
        sum+=a[i];
        i++;
    }
    long count = 0;
    for(int k=1;k<i-1;k++)
        count+=k;
    cout<< sum-count <<endl;
}
发表于 2019-09-26 11:01:48 回复(0)
str = input()
li = str.split( )
for i in li:
    cout=li.count(i)
    if cout > 1:
        num = i
print(num)
比较简单的python版,只适合查一个
发表于 2019-09-17 16:54:28 回复(0)
nums = list(map(int, input().split()))
get_sum = sum(nums)
want_sum = max(nums) * (max(nums) + 1) / 2
print(int(get_sum - want_sum))


发表于 2019-08-29 16:20:09 回复(0)
#include<iostream>
using namespace std;

int main(){
    int n;
    vector<int> m;
    int sum=0;
    int cnt=0;
    while(cin>>n)
    {
        sum+=n;
        cnt++;
        
    }
    sum-=((cnt-2)*(cnt-1))/2;//连续自然数求和公式(记得-2 因为要除去0和要寻找的数)
    
    cout<<sum<<endl;
    return 0;
}
发表于 2019-08-26 15:30:14 回复(0)
python版,利用str的内建函数count()
s = str(input()).split(" ")
s1 =list(set(s))
di =dict().fromkeys(s1, 0)
forchar ins:
    di[char] =s.count(char)
for key in di:
    if di[key] ==2:
        print(key)
编辑于 2019-08-25 10:30:26 回复(0)
num = list(map(int, input().split()))
dic = {}
for i in num:
    if i not in dic:
        dic[i] = 1
    else:
        print(i)
        break

发表于 2019-07-26 08:17:20 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        Set<Integer> hset = new HashSet<>();
        while(sc.hasNext()){
            int n = sc.nextInt();
            if(hset.contains(n)){
                System.out.println(n);
                break;
            }else{
                hset.add(n);
            }
        }
        sc.close();
    }
}

发表于 2019-07-20 09:32:07 回复(0)