自己的垃圾代码,思路错误了,将甲的十位和各位拆开进行遍历,造成双重循环,而且容易出bug。对于两种方式计算丙值的比较也错误了,int == int 是明显错误的,double == double也是不对的,因为double也有一定的精度问题,只有判断int == double 才能得到正确的结果。
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main() {
int wo, x, y, a, b, jia, yi, bing, cnt=0;
double t,q;
cin >> wo >> x >> y;
for(int i = 1; i < 10; i++){
for(int j = 0; j < 10; j++){
t = (abs(9*i-9*j) / x);
q = (10*j+i) /y ;
if( t == q ){
jia = 10*i + j; yi = 10*j + i; bing = yi / y;
cnt++;
}
}
}
if(cnt == 0) cout << "No solution";
else{
printf("%d ", jia);
if(wo == jia) printf("ping ");
else printf("%s", wo>jia?"gai":"cong");
if(wo == yi) printf("ping ");
else printf("%s", wo>yi?"gai":"cong");
if(wo == bing) printf("ping ");
else printf("%s", wo>bing?"gai":"cong");
}
return 0;
}
二次修改,
- 创建了一个void-printf 函数做打印输出,注意参数为double类型。
- 尽量避免使用 / 进行比较运算,是错误的。
3.用从大到小进行遍历,解决如果有重复输出最大值的问题,非常巧妙。
https://blog.csdn.net/liuchuo/article/details/84972915
#include <iostream>
#include <cmath>
using namespace std;
int m, x, y;
void print(double n){ //这也是个错点,double还是int
if(m == n) printf(" Ping");
else if(m > n) printf(" Gai");
else printf(" Cong");
}
int main() {
cin >> m >> x >> y;
for(int i = 99; i >= 10; i--){
int j = i % 10 * 10 + i / 10;
double k = abs(i - j) * 1.0/ x;
if(j == k * y){
//if(k == j / y){ //用除是错误的
cout << i;
print(i); print(j); print(k);
return 0;
}
}
cout << "No Solution";
return 0;
}