这是我在“尝试”中的代码,用于从用户输入的数字中查找最大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;
}
}
}