题目描述
将 1, 2,ldots, 91,2,…,9 共 99 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 A:B:CA:B:C,试求出所有满足条件的三个三位数,若无解,输出 No!!!
。
//感谢黄小U饮品完善题意
输入格式
三个数,A,B,CA,B,C。
输出格式
若干行,每行 33 个数字。按照每行第一个数字升序排列。
输入输出样例
1 2 3
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!!!"); } } }