【问题标题】:Missing number in array in C programmingC编程中数组中缺少数字
【发布时间】:2019-10-15 10:07:27
【问题描述】:

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

【问题讨论】:

    标签: c arrays missing-data


    【解决方案1】:

    正确的代码

    在 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;
    }
    

    【讨论】:

      【解决方案2】:

      您在for 循环内重新声明了变量arra。因此,当您分配给arra[run] 时,您分配给的是内部数组,而不是main() 函数中的那个。因此,当您尝试在最后打印数组的内容时会得到垃圾。

      您还声明了只有一个元素的第一个数组,而不是 T 元素。

      去掉第二个声明,把第一个声明改成

      long arra[1];
      

      long arra[T];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-28
        • 2022-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多