带分数
思路:全排列的思想再插入两个运算符,搜索类型的题。
用了字符串,感觉蠢的不行,后来看到别人的题解用字符数组也很方便。。就大概博主懒吧,放上来以便于复习。代码有参考他人
import java.util.Scanner;
//带分数
public class B {
static int num;
static int len;
static int[] vis = new int[10];
static int count = 0;
public static int count(int left, int right, char[] a) {
int res = 0;
int k = 1;
for(int i = right-1; i >= left; i--) {
res += ((int)a[i]-'0')*k;
k*=10;
}
return res;
}
public static boolean legal(String str) {
char[] ch = str.toCharArray();
for(int i = 1; i <= len; i++) {
for(int j = i+1; j < 9; j++) {
int a = count(0, i, ch);
int b = count(i, j, ch);
int c = count(j, 9, ch);
if(b % c != 0)
continue;
if(num == a + b/ c)
return true;
}
}
return false;
}
public static int run(int index, String str) {
if(index == 9) {
if(legal(str)) {
count++;
}
}else {
//System.out.println("index = "+index);
for(int i = 1; i < 10; i++) {
if(vis[i] == 0) {
vis[i] = 1;
run(index+1, str+String.valueOf(i));
vis[i] = 0;
}
}
}
return count;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
len = s.length();
num = Integer.parseInt(s);
System.out.println(run(0, ""));
}
}