我写了一个,请各位指正:
class Test1 { //by xiaofushen
public static void main(String[] args) {
double sum = 0;double m = 1;double a = 1; //定义sum,记录迈法总数
for (int i = 1,j = 40 - 2 * i;i <= 20 ;i++ ) { //i是迈2阶的步数,j是迈一阶的步数,i=0另算
for (int x = 1;x <= i ;x++ ) {
m *= x;//求对应i的阶乘
}
for (int y = i + j;y >= j + 1 ;y-- ) {
a *= y;//求对应A(i)(i+j)的排列
}
sum += (a / m);//算出i对应的每种组合迈法总数,并求和
//之前用long定义sum,m,a但是这步运行出错:ArithmeticException
//用double输出是Infinity(无穷)
}
sum++;//加上i=0的迈法
System.out.println(sum);//输出迈法总数
}
}
先定义一个组合类
public class Combination {
//定义降序阶乘,返回积
public static int factorial(int start){
int ji=1;
for(;start>=1;start--){
ji*=start;
}
return ji;
}
//定义降序number个数阶乘,返回积
public static int factorial_limit(int start,int number){
int ji=1;
while(number>=1){
ji*=start;
number--;
start--;
}
return ji;
}
//定义组合方法,参数total是指总共迈的步数,select为一次迈一步的次数(也可表示一次迈两部的步数)
public static int OpCombination(int total,int select){
int tmp1=factorial_limit(total, select);
int tmp2=factorial(select);
return tmp1/tmp2;
}
}
再用主方法调用它
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义一个变量,记录走法的次数
int times=0;
//定义一个循环,局部变量i表示一种走法中,一步2阶出现的次数
for(int i=0;i<=20;i++){
int tmp=0;
//tmp表示一步1阶出现的次数
tmp=40-2*i;
//tmp表示总共走了多少步
tmp+=i;
//进行组合,统计次数
times +=Combination.OpCombination(tmp, i);
}
System.out.println(times);
}