C编程中数组缺少数字

时间:2019-05-29 18:31:01

标签: c arrays missing-data

给出一个大小为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

2 个答案:

答案 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;
}