Time Limit: 1000 mSec Memory Limit : 65536 KB
Problem Description
An array of length n, with address from 1 to n inclusive, contains entries from the set {1,2,...,n-1} and there's exactly two elements with the same value. Your task is to find out the value.
Input
Input contains several cases.
Each case includes a number n (1<n<=10^6), which is followed by n integers.
The input is ended up with the end of file.
Output
Your must output the value for each case, one per line.
Sample Input
2
1 1
4
1 2 3 2
Sample Output
1
2
Source
思路二:由于输入的数据只能是1,2,3....(n-1) , t 。共n个数, 其中 1 <= t <= n-1。所以只要s = (1+2+…+n) - (1+2+…(n-1)+ t ) = n - t ,然后再 n - s = n - (n - t )= t
Problem Description
An array of length n, with address from 1 to n inclusive, contains entries from the set {1,2,...,n-1} and there's exactly two elements with the same value. Your task is to find out the value.
Input
Input contains several cases.
Each case includes a number n (1<n<=10^6), which is followed by n integers.
The input is ended up with the end of file.
Output
Your must output the value for each case, one per line.
Sample Input
2
1 1
4
1 2 3 2
Sample Output
1
2
Source
IBM Challenge 2004.1
*****************************************************************
思路一:由于1<n<=10^6,所以可以创建一个数组a[1000005]来存储所有输入的数据,然后用快速排序sort,再遍历一遍,找到相邻的2个数相同的即可。
#include<iostream>
#include<algorithm>
using namespace std;
int n,a[1000005];
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
for(int i=0;i<n-1;i++)
{
if(a[i]==a[i+1])
{
printf("%d\n",a[i]);
break;
}
}
}
return 0;
}
思路二:由于输入的数据只能是1,2,3....(n-1) , t 。共n个数, 其中 1 <= t <= n-1。所以只要s = (1+2+…+n) - (1+2+…(n-1)+ t ) = n - t ,然后再 n - s = n - (n - t )= t
#include <stdio.h> int main() { int n; while (scanf("%d", &n) != EOF) { int i,val, s = 0; for( i = 1; i <= n; i++) { scanf("%d", &val); s -= val; s += i; } printf("%d\n", n - s); } return 0;}