目录
1 问题描述
观察下面的算式:
* * × * * = * * *
它表示:两个两位数字相乘,结果是3位数。其中的星号(*)代表任意的数字,可以相同,也可以不同,只要不是在首位的就可以是0。当然,满足这个要求的算式很多,但我们还有如下的要求:
所有星号所代表的数字全都是奇数。满足这个要求的算式就不多了。
比如:13 x 15 = 195
题目的任务是:编写程序,找到所有可能的情况。
输出的结果中,每个情况占用1行,不需要考虑不同情况如何排序问题。每行的格式如:
13 x 15 = 195
其中乘号用“x”表示。
2 解决方案
1 import java.util.ArrayList; 2 3 public class Main { 4 public static ArrayList<String> list = new ArrayList<String>(); 5 6 public static void main(String[] args) { 7 for(int i = 11;i < 100;i++) { 8 int i1 = i / 10, i2 = i % 10; 9 if(i1 % 2 == 0 || i2 % 2 == 0) 10 continue; 11 for(int j = 11;j < 100;j++) { 12 int j1 = j / 10, j2 = j % 10; 13 if(j1 % 2 == 0 || j2 % 2 == 0) 14 continue; 15 int result = i * j; 16 if(result >= 1000 || result < 100 || result % 2 == 0) 17 continue; 18 int a1 = result % 10; 19 int a2 = result / 10 % 10; 20 int a3 = result / 100; 21 if(a1 % 2 == 0 || a2 % 2 == 0 || a3 % 2 == 0) 22 continue; 23 StringBuffer s = new StringBuffer(""); 24 s.append(i); 25 s.append("x"); 26 s.append(j); 27 s.append(" = "); 28 s.append(result); 29 if(!list.contains(s.toString())) 30 list.add(s.toString()); 31 } 32 } 33 for(int i = 0;i < list.size();i++) 34 System.out.println(list.get(i)); 35 } 36 }
运行结果:
13x15 = 195 13x55 = 715 13x75 = 975 15x13 = 195 15x37 = 555 15x53 = 795 17x35 = 595 17x55 = 935 35x17 = 595 37x15 = 555 53x15 = 795 55x13 = 715 55x17 = 935 75x13 = 975