洛谷 JAVA 题解 P1618 三连击(升级版)

洛谷 JAVA 题解 P1618 三连击(升级版)

package 新手村.BOSS入门练习;
import java.util.Scanner;
public class P1618 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in=new Scanner(System.in);

        int m1=in.nextInt();
        int m2=in.nextInt();
        int m3=in.nextInt();


        int f=0;

        for(int a=123;a<999;a++){
            int b=a/m1*m2;
            int c=a/m1*m3;
            if(b>=999||c>=999)break;
            String a1=String.valueOf(a);
            String b1=String.valueOf(b);
            String c1=String.valueOf(c);

            if(a>b||a>c||b>c)break;
            if(pd(a1,b1,c1)){ //解决不可以重复123456789或缺少问题
                if(hj(a,b,c).equals(hj(m1,m2,m3))){//判断比例是否准确
                    f=1;
                    System.out.println(a+" "+b+" "+c);
                }
            }

        }
        if(f==0){
            System.out.println("No!!!");
        }

    }

    private static String hj(int a, int b, int c) {//约分
        // TODO Auto-generated method stub
        for(int i=a;i>=2;i--){
            if(a%i==0&&b%i==0&&c%i==0){
                a=a/i;
                b=b/i;
                c=c/i;
            }
        }
        return String.valueOf(a)+String.valueOf(b)+String.valueOf(c);//玄妙一步,也就是通过这个来判断两个是否相等
    }

    private static boolean pd(String a1, String b1, String c1) {
        // TODO Auto-generated method stub
        String s=a1+b1+c1;

        for(char i='1';i<='9';i++){
            if(!s.contains(String.valueOf(i))){//contains可以很好的用来判断
                return false;//如果有一个不包含返回false
            }
        }
        return true;
    }
}

猜你喜欢