查找数组中的最小偶数和最大偶数

问题描述 投票:1回答:2
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();
}

我输入值1,2,3,4,5,6,7,8,9,10为什么结果是Min 1 Max 10enter image description here

c arrays max min
2个回答
1
投票

此测试用例暴露了代码的错误之处,无论min是奇数还是偶数,都已将maxA[1]初始化为A[1]。>

问题:

[在某些情况下,数组不包含任何偶数。在这种情况下,您可能希望打印而不是打印-1INT_MININT_MAX

解决方案:

  1. 具有两个标志来知道您是否找到了minmax

    int foundMin = 0;
    
    int foundMax = 0;
    
  2. 添加头文件limits.h,并将最小值和最大值初始化为如下:

  3. int min = INT_MAX;
    
    int max = INT_MIN;
    
  4. 修改循环,以使标志达到目的:

  5. 不要无缘无故浪费数组的第零个索引。在修改数组声明和输入循环之前进行相应的修改改变这一点。

    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_MININT_MAX的情况下,必须使用<=>=进行比较在此循环中。

  6. 略微修改您的打印代码,以便所有情况覆盖。

  7. if (foundMin)
    
    {
    
     // Print min
    
    }
    
    else
    
    {
    
     // Print "min not found"
    
    }
    
    // Do the same with max
    

    奖金:

您可以从以下链接中学习以优化代码:

  1. How do I check if an integer is even or odd using bitwise operators

  2. here讨论的算法将为您提供更好的时间复杂度以实现相同的目标。


0
投票

min = A[1];此处min已被初始化为1。因此,

© www.soinside.com 2019 - 2024. All rights reserved.