PAT乙级1088 三人行 java 含测试点3,4

 

思路:现在草稿纸上分类解方程组 具体为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());
        }

    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值