如何在不使用数组的情况下找到缺失的数字?

0 c arrays numbers sequence

我必须在数字序列中找到丢失的数字。输入由 0 到 35000 之间的正整数 n 和 n 个范围为 [0..n] 的唯一数字组成。(所以这个范围包含n+1个数字)。

sum={n*(n+1)}/2我已经用and then尝试过一些事情misNum=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;
}
Run Code Online (Sandbox Code Playgroud)

输入和结果应该是:

输入:2“输入”0 2。输出:1

输入:3“输入”0 3 1。输出:2

niv*_*led 5

从 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);
}
Run Code Online (Sandbox Code Playgroud)