将军鬼上身
将军鬼上身啦!打败万恶的ghost以后,将军准备回寝室告诉大伙儿这个消息,没想到杯具又发生了… 你知道有种鬼叫“路鬼”吗?让人莫名其妙的迷路,将军就被这种鬼上身了。将军本来要上楼的,但是因为鬼上身,他要不就上一层楼,要不就下一层楼,这个是随机的,他不能控制自己啦! 假设将军住在第M楼,刚开始将军在K楼,因为体力原因,将军只能上或者下N次楼,假设东6宿舍共有100层。现在问当体力消耗完的时候,将军刚好回到寝室那一层有多少种走法。 例如:将军住在5楼,将军能上或者下5次楼,现在在1楼, 那么将军将回不到寝室啦,为什么?我也不知道。 Input
有多组测试数据,每组测试数据共一行,为M,N,K(0 < N < 21,0 < M,K < 101)的值,中间以空格分开,分别代表将军住在第几层,能移动几次和刚开始在第几层; Output
对应每一组测试数据,输出体力消耗完时将军刚好回到寝室那一层的走法总数
Sample Input
44 5 41
5 5 1
Sample Output
5
0
不晓得哪个地方错了啊,纠结啊,wrong了很多次,求指导
#include<stdio.h>
void f(double c,double n)//用排列组合计算有多少种方法
{ double i=0,s1=1,s2=1;
c=(n-c)/2;
for(i=n;i>(n-c);i--)
s1=i*s1;
for(i=1;i<=c;i++)
s2=s2*i;
printf("%.lf\n",s1/s2);
}
void main()
{ void f(double c,double n);
double flour,flour1;
double n,c,m,m2;
int m1;
while(scanf("%lf %lf %lf",&flour,&n,&flour1)!=EOF)
{ if(flour>0&&flour<101&&n>0&&n<21&&flour1>0&&flour1<101)
{
c=m=m2=m1=0;
if(flour>flour1) c=flour-flour1;
else c=flour1-flour;
m=(n-c)/2;
m1=m;
m2=m1;
if(m2!=m)
printf("%.lf\n",0);
else
f(c,n);
}
}
}
我的思路是采用排列组合即