写这道题前可以先完成普通版然后再完成升级版
题意:
将1-9这九个数分为三组,形成比例为形成A:B:C(而且A<B<C),求出所有满足条件的三个三位数,要无解就输出No!!!
解题思路:
题目很简单,但却有隐藏条件,一不小心就WA。
最简单的方式就是把所有数都试一遍,如果符合了就输出,最后如果没有一个符合的就输出No!!!。
那么就需要知道限制条件是那些。
1.三个三位数的组成是从1-9中选,每个数只能出现一次
通过String的contains()方法判断1-9是否唯一,length()确保长度为9
2.三个三位数形成的比例可能为小数(最后一个测试点)
通过求出A:B:C的比值后再进行循环判断操作
package LOQ.暴力枚举;
import java.util.Scanner;
/**
* @Author Lunau
* @Create 2022-10-03 17:16
* @Description
* @Result
*/
public class P1618三连击升级版_2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//A:B:C
double t1 = sc.nextInt();
double t2 = sc.nextInt();
double t3 = sc.nextInt();
double b,c;
//计数器
int count = 0;
for(double a = 123;a<=329;a++) {
//求出比值,可能为小数
b = a * (t2/t1);
c = a * (t3/t1);
if (judge(a,b,c)) {
System.out.println((int)a+" "+(int)b+" "+(int)c);
count++;
}
}
if (count==0) {
System.out.println("No!!!");
}
}
public static Boolean judge(double a,double b,double c) {
String str = ""+(int)a+(int)b+(int)c;
if (str.contains("1")&&str.contains("2")&&str.contains("3")&&str.contains("4")
&&str.contains("5")&&str.contains("6")&&str.contains("7")&&str.contains("8")&&str.contains("9")
&&str.length()==9) {
return true;
}
return false;
}
}