“编写一个读取 n 数字并确定数字 c 的程序,这是包含在其中找到的最大数字的最小读数。 “
示例:n = 10;数字:23 12 64 12 72 345 67 23 71 634; c = 67(这些数字中找到的最大数字是7,它可以在72,67,71中找到。最小的数字是67)
我不知道为什么,但我的程序不起作用。每一次,它都告诉我c = 0。
#include <iostream>
using namespace std;
int main()
{
int n, prec, crt, digitMax, t, a, i, c;
digitMax=0;
t=0;
cout<<"Give the number of numbers: "; cin>>n;
cout<<"Give the first number: "; cin>>prec;
do{
a=prec%10;
prec=(prec-a)/10;
if(a>digitMax){
digitMax=a;
}
} while(prec!=0);
for(i=1; i<n; i++){
cout<<"Give the next number: "; cin>>crt;
do{
a=crt%10;
crt=(crt-a)/10;
if(a>t){
t=a;
}
} while(crt!=0);
if(digitMax>t){
c=prec;
} else if(digitMax<t) {
digitMax=t;
c=crt;
} else if(prec>=crt){
c=crt;
} else{
c=prec;
}
prec=crt;
}
cout<<"c is "<<c;
}
答案 0 :(得分:0)
问题是你在一个函数内部做所有事情使它变得非常复杂。解决问题的正确方法是首先定义一个执行较小任务的小函数。
计算数字中最大数字的一个:
int BigestDigitOf(int x)
{
x = std::abs(x);
int biggestDigit = 0;
while (x)
{
biggestDigit = std::max(biggestDigit, x%10);
x/=10;
}
return biggestDigit;
}
根据c
定义比较两个数字的那个:
bool BiggerDigitOrSmallerValue(int a, int b)
{
auto bdA = BigestDigitOf(a);
auto bdB = BigestDigitOf(b);
if (bdA > bdB) {
return true;
}
return bdA == bdB && a < b;
}
之后解决问题非常简单(如果使用STL,则为一行)。