思路:现在草稿纸上分类解方程组 具体为1.9|a-b|=x*c 2.10b+a=y*c 其中a,b分别为甲能力值的十位与个位 c为丙能力值 得到9|a-b|=(10b+a)*x/y 之后分类去掉绝对值得到a与b的关系式 而a是正整数 b是整数(注意不一定是正整数,可以是0)令a遍历9到1 b遍历9到0(逆序的第一个解即最大) 若a b满足得到的关系式,那么(a,b)就是一组最大解 之后按照题目要求输出即可
测试点3:输入90 9 1 输出 90 Ping Gai Gai
我一开始错了这个,因为误以为乙也要是两位正整数,但题目仅描述了乙是由甲的两位数对调的得到的,20对调成02,也满足题意
测试点4:注意丙不一定是正整数 所以要用double类型
代码如下:
import java.util.*;
public class Main {
public static int MaxIntSolution(int x,int y){
//提升效率 x=0说明甲是11的正整数倍
if(x==0){
return 11*y;
}
//防止出现x=0 y=0这样的输入 导致/0
if(x*y!=0) {
//逆序遍历获得最大a
for (int a = 9; a >= 0; a--) {
//同样逆序
for (int b = 9; b >= 0; b--) {
//该情况是a<b 解二元方程组得到的关系式
if ((9 * y - x) * a == ((9 * y + 10 * x) * b)) {
return 10 * a + (9 * y - x) * a / (9 * y + 10 * x);
}
//这种情况是a>b 解二元方程组得到的关系式
else if ((9 * y + x) * a == (9 * y - 10 * x) * b) {
return 10 * a + (9 * y + x) * a / (9 * y - 10 * x);
}
}
}
}
return 0;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int myself=scan.nextInt();
int x=scan.nextInt();
int y=scan.nextInt();
int jia=MaxIntSolution(x,y);
if(jia==0){
System.out.println("No Solution");
}
else{
int yi=jia%10*10+jia/10;
//丙不一定能整除 用double
double bing=yi/(double)y;
//分别判断甲乙丙和自身能力值,拼接结果
String result=jia+" ";
if(jia>myself) {
result+="Cong ";
}
else if(jia==myself){
result+="Ping ";
}
else {
result+="Gai ";
}
if(yi>myself) {
result+="Cong ";
}
else if(yi==myself){
result+="Ping ";
}
else {
result+="Gai ";
}
if(bing>myself) {
result+="Cong ";
}
else if(bing==myself){
result+="Ping ";
}
else {
result+="Gai ";
}
System.out.print(result.trim());
}
}
}