每日算法之解法数目

 1 package Computational;
 2 
 3 public class Main {
 4     static int count = 0;
 5     public  static  void main(String args[]){
 6         char[] str = "123456789".toCharArray();
 7         paixu(str,0,8);
 8         System.out.print(count);
 9     }
10     //我们为了让每个数字都出现在每个位置使用交换
11     static  void  swap(char[] str,int a,int i){
12         char  temp;
13         temp = str[a];
14         str[a] = str[i];
15         str[i] = temp;
16     }
17     //还需要一个函数来检验是否合格
18     static  boolean check(char[] str){
19         double[] num =new  double[10];
20         for(int i=0;i<9;++i)
21             num[i] = str[i]-'0';//因为这是char数组,所以int(‘0’)=48,需要还原成int数组,-‘0’刚好
22         if(num[0]+num[1]/num[2]+(num[3]*100.0+num[4]*10+num[5])/(num[6]*100+num[7]*10+num[8])==10)
23             return true;
24         return  false;
25     }
26     static void paixu(char[] str,int a,int b){
27         if(a==b){
28             if(check(str)){
29                 ++count;
30                 System.out.println(str);
31             }
32         } else {
33             for(int i=a;i<=b;++i){
34                 swap(str,i,a);
35                 paixu(str,a+1,b);
36                 swap(str,i,a);
37         }
38 
39         }
40     }
41 }

 


 

这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。(比赛时,题目有改动)


比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。

这个算式一共有多少种解法?

注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。

 

可以看出要是使用for循环的话肯定是不够好的,而且还需要是十for循环

所以想到递归

1-9  9个数字,我们有9!种排列

但是我们想想只需要考虑每个数字在每个位置都有出现就好

 

posted @ 2018-04-11 09:29  怡城  阅读(140)  评论(0编辑  收藏  举报