int i,max,min;
int A[11];
min = A[1];
max = A[1];
for(i=1;i<=10;i++)
{
if(min > A[i] && A[i]%2 ==0 ) min = A[i];
if(max < A[i] && A[i]%2 ==0 ) max = A[i];
}
printf("Minimum Even : %d\n",min);
printf("Maximum Even : %d\n",max);
getch();
}
此测试用例暴露了代码的错误之处,无论min
是奇数还是偶数,都已将max
和A[1]
初始化为A[1]
。>
问题:
[在某些情况下,数组不包含任何偶数。在这种情况下,您可能希望打印而不是打印-1
或INT_MIN
或INT_MAX
。
解决方案:
具有两个标志来知道您是否找到了min
和max
:
int foundMin = 0;
int foundMax = 0;
添加头文件limits.h
,并将最小值和最大值初始化为如下:
int min = INT_MAX;
int max = INT_MIN;
修改循环,以使标志达到目的:
注
:不要无缘无故浪费数组的第零个索引。在修改数组声明和输入循环之前进行相应的修改改变这一点。
for (i = 0; i < ARRAY_SIZE; ++i) { if (A[i] <= min && A[i] % 2 == 0) { foundMin = 1; min = A[i]; } else if (A[i] >= max && A[i] % 2 == 0) { foundMax = 1; max = A[i]; } }
<
或>
不会总是在此问题中起作用。碰到角落在INT_MIN
和INT_MAX
的情况下,必须使用<=
或>=
进行比较在此循环中。
略微修改您的打印代码,以便所有情况覆盖。
if (foundMin)
{
// Print min
}
else
{
// Print "min not found"
}
// Do the same with max
奖金:
您可以从以下链接中学习以优化代码:
How do I check if an integer is even or odd using bitwise operators
here讨论的算法将为您提供更好的时间复杂度以实现相同的目标。
min = A[1];
此处min已被初始化为1。因此,