这是我在“尝试”中的代码,用于从用户输入的数字中查找最大2个值:

#include <iostream>
using namespace std;

void maximum2(int a, int& max1,int& max2 ){

int temp = 0;
max2= a%10;
max1 = ((a/10)%10);

if (max2>max1) {
  temp = max1;
  max1 = max2;
  max2 = temp;}
for(; a>0; a/=10){
    if (a%10>max1)max1= a%10;
    else if (a%10<max1 && a%10>max2) max2 = a%10;
}

}
void main(){

int max1, max2, num;
cin>>num;
  maximum2(num,max1,max2);
  cout<<"max 1 = "<<max1<<" max 2 = "<<max2<<endl<<endl;
}


它适用于大多数数字,例如例如除某些情况外为34256。例如,当我输入54321时,将max1设置为5,这是正确的,但将max2设置为1,这不是所需的值。您愿意帮我追踪我的错误吗?

最佳答案

for循环内,您正在更改max1的值或max2的值。但是,为了使代码在所有情况下都能正常工作,必须在for循环内有一个点,在此点上您可以同时更改max1的值和max2的值。

话虽如此,这是一个修正建议:

void maximum2(int a,int& max1,int& max2)
{
    max1 = 0;
    max2 = 0;
    for(; a>0; a/=10)
    {
        int temp = a%10;
        if (temp > max1)
        {
             max2 = max1;
             max1 = temp;
        }
        else if (temp > max2)
        {
             max2 = temp;
        }
    }
}

09-10 03:59