P1618 三连击(升级版)

题目描述

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

//感谢黄小U饮品完善题意

输入格式

三个数,A,B,CA,B,C。

输出格式

若干行,每行 33 个数字。按照每行第一个数字升序排列。

输入输出样例

输入 #1
1 2 3
输出 #1
192 384 576
219 438 657
273 546 819
327 654 981

说明/提示

保证 A<B<C

 

 

题解:

  三重循环,第一重找第一个,第二重找第二个...

  因为从1-9找出3个3位数且数字不重复,那个也就是说3个三位数共9个数字是1-9

  第一重循环:因为都是三位数,第一个数最小,则为100,又要不重复,10几不行(有0),11几不行(有两个1)

        所以最小得是123,把第一重数字转为字符串,判断各个字符间是否相等和是否有字符为0,若都不满足

        进入第二重循环

  第二重循环:从213开始,因为第一重已经把“1”占了,所以第二重最小得“2”开头,之后同样跟第一重判断,看字符间是否相等和是否有0

        若都不满足在次判断  j / i == B / A 不? 注意,i 和 j 都是int 类型,要强转成float 在进行运算,满足后进入第三重

  第三重循环:从312开始,理由同上;  将第一重字符串x,第一重字符串y,第一重字符串z相加,先将相加结果字符串转成char数组,

        再将数组进行排序,之后再转换成string,这样就可以进行字符串比较了。用equal方法。

        之后只需要判断比例是否一样就行了。

  有一个问题是:如果没有结果怎么判断?这时候就定义一个计数器number,如果有值,number+1,在最终判断number的值是否为0

          得到解果。

 

就今天的题解详细,自我感觉是由于前几次写的代码的确好懂吧

  

import java.util.Arrays;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        float A = scanner.nextInt();
        float B = scanner.nextInt();
        float C = scanner.nextInt();
        int number = 0;
        if (A >B || A>C||B>C || A==0){
            System.out.println("No!!!");
            return;
        }
        for (int i = 123; i <= 329; i++) {
            String x = String.valueOf(i);
            if ((x.charAt(0) == x.charAt(1)) || (x.charAt(0) == x.charAt(2))
                || (x.charAt(1) == x.charAt(2)) || x.contains("0")){
                continue;
            }else {
                for (int j = 213; j < 659; j++) {
                   String y = String.valueOf(j);
                    if ((y.charAt(0) == y.charAt(1)) || (y.charAt(0) == y.charAt(2))
                            || (y.charAt(1) == y.charAt(2))|| y.contains("0") ){
                        continue;
                    }else if (((float) j/(float) i == B/A)){
                        for (int k = 312; k <=987; k++) {
                            String z = String.valueOf(k);
                            String str = x+y+z;
                            char [] stri = new char[9];
                            stri = str.toCharArray();
                            Arrays.sort(stri);

                            str = String.valueOf(stri);

                            if (!str.equals("123456789")){
                                continue;
                            }else if (((float) j/(float) i == B/A)&&((float) k/(float) i == C/A)){
                                System.out.println(i+" "+j+" "+k);
                                number++;
                            }
                        }
                    }
                }
            }
        }
        if (number == 0){
            System.out.println("No!!!");
        }
    }
}

 

 

 

 

 

posted on 2020-02-18 20:15  Hi,Bro  阅读(441)  评论(0)    收藏  举报