凑算式
这个算式中AI代表19的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
思路:拉成一维数组全排练+判断,值得注意的是B/C和DEF/GHI都是整除。
解析
C++题解
#include <bits/stdc++.h>
using namespace std;
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
bool check() {
int x = a[3]*100 + a[4]*10 + a[5];
int y = a[6]*100 + a[7]*10 + a[8];
if((a[1]*y+a[2]*x)%(a[2]*y) != 0) return false; // 一定要是整除..
// 这里注意两个除法合并到一起 不然单个除不净
int t = a[0] + (a[1]*y+a[2]*x)/(a[2]*y);
if(t == 10) return true;
return false;
}
int main() {
int Ans = 0;
do {
if(check()) Ans++;
}while(next_permutation(a, a+9));
printf("%d\n", Ans);
return 0;
}
Java题解
public class _03凑算式 {
public static void main(String[] args) {
dfs(0);
System.out.println(ans);
}
static int[] a = new int[] {1,2,3,4,5,6,7,8,9};
static int ans=0;
static void dfs(int m) {
if(m>=9) {
//a[0]+a[1]/a[2]+a[3]a[4]a[5]/(a[6]a[7]a[8]) = 10
//--> A + B/C + D/E = 10 --> A*C*E + B*E + D*C = 10*C*E
int A = a[0];
int B = a[1];
int C = a[2];
int D = 100*a[3]+10*a[4]+a[5];
int E = 100*a[6]+10*a[7]+a[8];
if(A*C*E + B*E +D*C == 10*C*E) {
ans++;
for(int i=0;i<9;i++)
System.out.print(a[i]+" ");
System.out.println();
}
return;
}
for(int i=m;i<9;i++) {
swap(m,i);
dfs(m+1);
swap(m,i);
}
}
static void swap(int i, int j) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}