给定大小为N-1的数组C并且假设存在从1到N的数字且缺少一个元素,则找到缺失的数字。
输入:
第一行输入包含一个整数T,表示测试用例的数量。对于每个测试用例,第一行包含N(数组大小)。后续行包含N-1个数组元素。
输出:
在数组中打印缺少的数字。
约束:
1≤T≤200
1≤N≤107
1≤C[i]≤107
例:
输入:
2
5
1 2 3 5
10
1 2 3 4 5 6 7 8 10
输出:
4
9
我用c ++完成了这个
#include <iostream>
using namespace std;
int main() {
int a,n,arr[50],j=1,element;
int sum,total[50],i;
cin>>n;
a=n;
while(n!=0)
{
cin>>element;
sum=0;
total[j]=0;
for(i=1;i<=element-1;i++)
{
cin>>arr[i];
sum=sum+arr[i];
}
total[j]=(element*(element+1)/2) -sum;
j++;
n--;
}
for(i=1;i<=a;i++)
{
cout<<total[i]<<endl;
}
return 0;
}
输出:
4
9
试试这个作为测试用例:
2
55
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
55
33 54 1 55 23 51 35 5 49 26 43 42 41 32 7 14 9 50 34 29 37 25 52 24 8 53 15 45 44 19 39 47 17 48 38 21 36 31 3 18 46 20 6 27 12 11 16 10 2 13 28 4 30 22
您的代码应该在您的控制下崩溃,然后您可以找出原因。
仔细考虑您对各种值的约束以及您的代码如何在这些约束的边缘运行。
此外,有一种方法可以解决此问题,根本不需要您使用任何数组。这是解决问题的最快方法。
因为您已声明大小为50块的数组。
但是,根据给定的约束条件:1≤N≤107,1≤C[i]≤107
如果你将元素的值超过50,它会给出分段错误,因为数组的最大大小是50。
所以,将数组的大小增加到arr [107];和[107];
然后提交解决方案,它会工作。
查找Missing元素的最佳解决方案之一是使用XOR运算符:
问题:给出了n-1个整数的列表,这些整数的范围是1到n。列表中没有重复项。列表中缺少一个整数。现在,我们需要找到丢失的号码。
方案:
方法1:通过找到第一个“n”个自然数的和。
步骤1:首先,找到从1到n的所有数字的总和(意味着找到第一个“n”个自然数的总和)
第2步:从总和中减去给定列表的每个元素(所有元素)。而且我们会得到丢失的号码。
注意:在方法1解决方案中添加大数字时可能存在整数溢出。
方法2:使用XOR运算符:
记住这些属性:n ^ n = 0 AND n ^ 0 = n
第1步:我们将从1到n的所有数字的xor(意味着,我们将取第一个“n”个自然数的xor)。
第2步:我们将获取给定数组(列表)的所有元素的xor。
步骤3:步骤1和步骤2的xor将给出所需的缺失数字。
Example : Given list arr = [4,2,1,6,8,5,3,9] n=9 (given)
Step1 : Step1_result = 1 ^ 2 ^ 3 ^ 4 ^ 5 ^ 6 ^ 7 ^ 8 ^ 9 = 1
Step2 : Step2_result = 4 ^ 2 ^ 1 ^ 6 ^ 8 ^ 5 ^ 3 ^ 9 = 6
Step3 : Final_Result = Step1_result ^ Step2_result = 1 ^ 6 = 7
But, How Final_Result calculated the missing number ?
Final_Result= ( 1 ^ 2 ^ 3 ^ 4 ^ 5 ^ 6 ^ 7 ^ 8 ^ 9 ) ^ ( 4 ^ 2 ^ 1 ^ 6 ^ 8 ^ 5 ^ 3 ^ 9 )
So , here ,
Final_Result = (1 ^ 2 ^ 3 ^ 4 ^ 5 ^ 6 ^ 7 ^ 8 ^ 9 ) ^ ( 4 ^ 2 ^ 1 ^ 6 ^ 8 ^ 5 ^ 3 ^ 9 )
= 1 ^ 2 ^ 3 ^ 4 ^ 5 ^ 6 ^ 7 ^ 8 ^ 9 ^ 4 ^ 2 ^ 1 ^ 6 ^ 8 ^ 5 ^ 3 ^ 9
= ( 1 ^ 1 ) ^ ( 2 ^ 2 ) ^ ( 3 ^ 3 ) ^ ( 4 ^ 4 ) ^ ( 5 ^ 5 ) ^ ( 6 ^ 6 ) ^ (7) ^ ( 8 ^ 8 ) ^ ( 9 ^ 9 )
= 0 ^ 0 ^ 0 ^ 0 ^ 0 ^ 0 ^ 7 ^ 0 ^ 0 ( property applied )
= 0 ^ 7 ( because we know 0 ^ 0 = 0 )
= 000 ^ 111
= 111
= 7 ( Required Result )