【发布时间】:2021-08-22 20:30:28
【问题描述】:
我编写了一个 C 程序来查找数组中最大偶数和最小偶数索引的差异(这里 0 被认为是偶数,从测试用例来看,它绝对不像数组应该排序)。如果数组中有一个元素或该数组中没有偶数,它将返回一个值或否。
#include <math.h>
#include <stdio.h>
int main() {
int n,small,big,a[50],b1,s1,diff;
scanf("%d",&n);
for(int i =0;i<n;i++){
scanf("%d",&a[i]);
}
small = a[0];
big = a[0];
for (int i = 1; i < n; i++)
{
if (a[i] < small && a[i]%2 == 0)
{
small = a[i];
s1 = i;
}
if (a[i] > big && a[i]%2 == 0)
{
big = a[i];
b1 = i;
}
}
diff = b1-s1;
if(diff==0){
printf("NO");
}
else{
printf("%d",diff);
}
return 0;
}
当我输入时
4
120 0 4 7
它不返回 1 。它返回 32657。 我在这里不明白什么逻辑?请帮帮我。
【问题讨论】:
-
由于您的问题是关于 C 的,请不要标记 C++,因为解决方案会有所不同。
-
您没有初始化所有变量。如果数组中没有偶数,那么
s1和b1将得到 indeterminate 值,从而导致diff计算的未定义行为。 -
如果
a[0]不是偶数会怎样?最好将第一个元素与所有其他元素一样对待,并将b1和s1初始化为 -1 以表示:到目前为止没有看到偶数元素。您打印 NO 的条件应反映这一点。 -
我怀疑你的意思是“输出”而不是“返回”。
-
@FredLarson 感谢您指出这一点。我已将其删除。
标签: c algorithm initialization max min