给出一个大小为N-1的数组C,并假设存在从1到N的数字,并且缺少一个元素,那么将找到丢失的数字。
输入: 输入的第一行包含一个整数T,它表示测试用例的数量。对于每个测试用例,第一行包含N(数组大小)。下一行包含N-1个数组元素。
输出: 打印数组中缺少的数字。
此问题是在n个整数序列中查找丢失的数字。但是,在使用下面的代码时,我无法获得预期的输出。
#include <stdio.h>
int main()
{
//code
int T,run,i;
scanf("%d", &T);
long N,res,C,en;
long arra[1];
for (run = 0;run <T; run++ )
{
long arra[T];
scanf("%ld", &N);
res =0;
for (i = 0; i <N-1; i++)
{
scanf("%ld",&C);
res = res + C;
}
en = ((N*(N+1))/2)- res; // subtracting the overall sum of array elements from N integers
arra[run]=en; //saving it to array
}
for(run = 0; run < T; run++)
{
printf("%ld ",arra[run]);
}
return 0;
}
我期望下面的输入和输出:
Input:
2
5
1 2 3 5
10
1 2 3 4 5 6 7 8 10
Output:
4
9
但实际输出是
1 -8719623343620674816
答案 0 :(得分:2)
您在arra
循环内重新声明了变量for
。因此,当您分配给arra[run]
时,就是分配给内部数组,而不是main()
函数中的那个。因此,当您尝试在最后打印数组的内容时,您会得到垃圾。
您还声明了只有一个元素而不是T
元素的第一个数组。
摆脱第二个声明,并从中更改第一个声明
long arra[1];
到
long arra[T];
答案 1 :(得分:0)
在for循环之前声明arra,否则每次迭代都会重新声明arra,删除其中的先前值
#include <stdio.h>
int main()
{
//code
int T,run,i;
scanf("%d", &T);
long N,res,C,en;
long arra[T];
for (run = 0;run <T; run++ )
{
scanf("%ld", &N);
res =0;
for (i = 0; i <N-1; i++)
{
scanf("%ld",&C);
res = res + C;
}
en = ((N*(N+1))/2)- res; // subtracting the overall sum of array elements from N integers
arra[run]=en; //saving it to array
}
for(run = 0; run < T; run++)
{
printf("%ld ",arra[run]);
}
return 0;
}