c语言 题目 猜算式,蓝桥杯竞赛题目(猜算式)
看下面的算式:
□□ x □□ = □□ x □□□
它表示:兩個兩位數相乘等于一個兩位數乘以一個三位數。
如果沒有限定條件,這樣的例子很多。
但目前的限定是:這9個方塊,表示1~9的9個數字,不包含0。
該算式中1至9的每個數字出現且只出現一次!
比如:
46 x 79 = 23 x 158
54 x 69 = 27 x 138
54 x 93 = 27 x 186
.....
請編程,輸出所有可能的情況!
注意:
左邊的兩個乘數交換算同一方案,不要重復輸出!
不同方案的輸出順序不重要
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
public class Main {
static boolean visited[] = new boolean[10];
static List k = new ArrayList();
static int[] vs = new int[10];
static HashSet rs = new HashSet();
public static void main(String[] args) {
long t1 =
System.currentTimeMillis();
dfs(1, 10);
for (String s : rs) {
System.out.println(s);
}
System.out.println(System.currentTimeMillis()
- t1);
}
private static void dfs(int begin, int end)
{
if (begin == end) {
check();
} else {
for (int i =
1; i <= 9; i++) {
if
(!visited[i]) {
visited[i]
= true;
vs[begin]
= i;
dfs(begin
+ 1, end);
visited[i]
= false;
}
}
}
}
private static void check() {
int a = vs[1] * 10 +
vs[2];
int b = vs[3] * 10 +
vs[4];
int c = vs[5] * 10 +
vs[6];
int d = vs[7] * 100 + vs[8] *
10 + vs[9];
if (a * b == c * d) {
if (a > b)
{
int
t = a;
a
= b;
b
= t;
}
rs.add(a +
"*" + b + "=" + c + "*" + d + "=" + a * b+","+c*d);
}
}
}
結果:
63*74=18*259=4662,4662
73*96=12*584=7008,7008
58*96=32*174=5568,5568
58*67=29*134=3886,3886
76*98=14*532=7448,7448
54*69=27*138=3726,3726
58*69=23*174=4002,4002
46*79=23*158=3634,3634
58*73=29*146=4234,4234
64*79=32*158=5056,5056
54*93=27*186=5022,5022
總結
以上是生活随笔為你收集整理的c语言 题目 猜算式,蓝桥杯竞赛题目(猜算式)的全部內容,希望文章能夠幫你解決所遇到的問題。