题目描述
凑算式
这个算式中AI代表19的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
思路
将题目转化为求九个数字的全排列即可,对每一个排列数进行等式验证,答案为29
如果对全排列有不明白的可以看在下写的另一个全排列题解
蓝桥杯 排列数
代码
public class Main {
static double[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
static int length = 9;
static int cnt = 0;
public static void main(String[] args) {
check();
while (nextqpl()) {
check();
}
System.out.println(cnt);
}
public static void check() {
if (data[0] + (data[1] / data[2])
+ (data[3] * 100 + data[4] * 10 + data[5]) / (data[6] * 100 + data[7] * 10 + data[8]) == 10)
cnt++;
}
public static boolean nextqpl() {
int swapPoint1 = length - 1, swapPoint2 = length - 1;
while (swapPoint1 > 0 && data[swapPoint1] < data[swapPoint1 - 1])
swapPoint1--;
if (swapPoint1 == 0)
return false;
else {
while (swapPoint2 > 0 && data[swapPoint2] < data[swapPoint1 - 1])
swapPoint2--;
swap(swapPoint1 - 1, swapPoint2);
reverse(swapPoint1, length - 1);
return true;
}
}
public static void swap(int x, int y) {
double temp = data[x];
data[x] = data[y];
data[y] = temp;
}
public static void reverse(int x, int y) {
for (int i = x, j = y; i < j; i++, j--)
swap(i, j);
}
}