如何在不使用数组的情况下找到丢失的数字?
How to find the missing number without using arrays?
我必须在数字序列中找到一个缺失的数字。
输入由一个介于 0 和 35000 之间的正整数 n 和 n 个范围为 [0..n] 的唯一数字组成。 (所以这个范围包含 n+1 个数字)。
我已经用 sum={n*(n+1)}/2
和 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;
}
输入和结果应该是:
输入:2 "enter" 0 2.输出:1
输入:3 "enter" 0 3 1。输出:2
从 0 到 n 的所有数字的总和是
n(a1+an)/2 = (in your case a1 = 0 and 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);
}
您有 n
个要扫描的整数。使用数学方程计算sum of first n+1
natural numbers。然后 运行 循环 n
次,然后 运行 循环添加所有扫描的 n
数字。然后用n+1
个自然数的和减去这个和。结果将是缺失的数字。
问题的计算也是正确的,可以通过一些修改来实现。
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *v[]) {
int length;
int num;
// printf("enter maximum number: ");
scanf("%d", &length);
int goal=length;
int i;
for(i=0; i!=length; i++){
// printf("number[%d]: ", i);
if(scanf("%d", &num) != 1) {
fprintf(stderr, "invalid input\n");
return 1;
}
if((num < 0) || (num > length)) {
fprintf(stderr, "invalid number %d\n", num);
return 2;
}
goal=goal+i-num;
};
// printf("missing number: ");
printf("%d\n", goal);
return 0;
}
我必须在数字序列中找到一个缺失的数字。 输入由一个介于 0 和 35000 之间的正整数 n 和 n 个范围为 [0..n] 的唯一数字组成。 (所以这个范围包含 n+1 个数字)。
我已经用 sum={n*(n+1)}/2
和 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;
}
输入和结果应该是:
输入:2 "enter" 0 2.输出:1
输入:3 "enter" 0 3 1。输出:2
从 0 到 n 的所有数字的总和是
n(a1+an)/2 = (in your case a1 = 0 and 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);
}
您有 n
个要扫描的整数。使用数学方程计算sum of first n+1
natural numbers。然后 运行 循环 n
次,然后 运行 循环添加所有扫描的 n
数字。然后用n+1
个自然数的和减去这个和。结果将是缺失的数字。
问题的计算也是正确的,可以通过一些修改来实现。
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *v[]) {
int length;
int num;
// printf("enter maximum number: ");
scanf("%d", &length);
int goal=length;
int i;
for(i=0; i!=length; i++){
// printf("number[%d]: ", i);
if(scanf("%d", &num) != 1) {
fprintf(stderr, "invalid input\n");
return 1;
}
if((num < 0) || (num > length)) {
fprintf(stderr, "invalid number %d\n", num);
return 2;
}
goal=goal+i-num;
};
// printf("missing number: ");
printf("%d\n", goal);
return 0;
}