gpt4 book ai didi

c - 从 1..N 中找出缺失的数字

转载 作者:太空宇宙 更新时间:2023-11-04 06:11:09 31 4
gpt4 key购买 nike

在一次采访中,他们让我找出数组中缺失的数字。array 将包含从 1N 的数字。

我的方法:

   int main()
{
int ar[20];
int sum = 0;

int n;

printf("enter numb of elements\n");
scanf("%d", &n);
printf("enter array numbers\n");
for(int i = 0; i<n;i++){
scanf("%d", &ar[i]);
sum +=ar[i];
}

printf("missing num=%d", ((n*(n+1))/2)-sum);
}

但是第一轮面试后面试官没有回电话。我不知道我的方法有什么问题。

最佳答案

您的代码存在一些问题:

  • 算法错误(差一):如果数组包含从 1 到 N 的所有数字,但缺少一个数字,则它有 N-1 个元素。您的代码读取 N 个元素。 (或者,如果数组实际上有 N 个元素,则目标和是 (N + 1) * (N + 2) / 2(从 1 到 N+1 的数字之和),而不是 N * (N + 1) / 2。)

  • 缺少包含(特别是 #include <stdio.h> )。这意味着调用 printf/scanf有未定义的行为。

  • int main()应该是 int main(void) .

  • 没有scanf调用检查它们的返回值。这意味着当读取输入失败并产生垃圾输出时,您的代码没有意识到。

  • 如果 n大于 20,您的代码会自动写入 ar 的范围之外.这是典型的缓冲区溢出。

  • 前一点尤其不幸,因为您的代码甚至不需要数组。您对输入数字所做的一切就是将它们加到 sum 中。 ,不需要单独的数组。

  • 您的格式在for(int i = 0; i<n;i++){ 中不一致| .为什么for(int没有空格和 i<n;i++){ , 但是i = 0; 周围有空格?

  • 取决于大小N是,n*(n+1)可能会溢出。

  • 您的代码生成的最后一行输出缺少终止换行符:printf("missing num=%d\n", ...);

关于c - 从 1..N 中找出缺失的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56427970/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com