P1618 三连击(升级版)---Java

题目描述

将 1,2,…,91, 2,\ldots, 91,2,…,9 共 999 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 A:B:CA:B:CA:B:C,试求出所有满足条件的三个三位数,若无解,输出 No!!!。

//感谢黄小U饮品完善题意
输入格式

三个数,A,B,CA,B,CA,B,C。
输出格式

若干行,每行 333 个数字。按照每行第一个数字升序排列。
输入输出样例
输入 #1

1 2 3

输出 #1

192 384 576
219 438 657
273 546 819
327 654 981

说明/提示

保证 A<B<CA<B<CA<B<C。

import java.util.Scanner;
public class P1618 {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);

        int m1=sc.nextInt();
        int m2=sc.nextInt();
        int m3=sc.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)){
                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))==false){
                return false;
            }
        }
        return true;
    }

}

你可能感兴趣的:(洛谷)