我必须在一系列数字中找到一个丢失的数字。
输入由0到35000之间的正整数n和范围为[0..n]的n个唯一数字组成。(所以这个范围包含n+1个数字)。
我已经用sum={n*(n+1)}/2misNum=sum-SumOfNum;尝试了一些东西,但是我找不到方法来实现这一点。
我写了一些代码,但没有用我之前提到的例子。显然,这段代码并不完整,但我不知道如何使它完整。

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *v[])  {
    int length;
    int num;

    scanf("%d", &length);
    /*scanf(???)*/

    int goal=length;
    int i;

    for(i=0; i!=length; i++){
        goal=goal+i-num[i];
    };
   return goal;
}

输入和结果应为:
输入:2“输入”0 2。输出:1
输入:3“输入”0 3 1。输出:2

最佳答案

从0到n的所有数字之和是
n(a1+an)/2=(在您的情况下,a1=0,an=n+1)n*(n+1)/2
所以丢失的数字是n*(n+1)/2-(长度后的输入数字之和)

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* v[]) {
    int length;
    int i = 0;
    int sum = 0;

    scanf_s("%d", &length);

    // calculate arithmetic series sum
    auto series_sum = ((length + 1) * (length)) / 2;

    while (i < length)
    {
        int next;
        scanf_s("%d", &next);

        sum += next;
        ++i;
    }

    printf("missing num is %d ", series_sum - sum);
}

关于c - 如何在不使用数组的情况下找到丢失的号码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58076187/

10-10 14:35
查看更多