标题:将军鬼上身
取消只看楼主
编程20123165
Rank: 2
等 级:论坛游民
帖 子:11
专家分:26
注 册:2013-5-18
结帖率:100%
已结贴  问题点数:20 回复次数:1 
将军鬼上身
将军鬼上身啦!
打败万恶的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);

}
}
}
我的思路是采用排列组合即
搜索更多相关主题的帖子: 将军 ghost 
2013-05-24 23:20
编程20123165
Rank: 2
等 级:论坛游民
帖 子:11
专家分:26
注 册:2013-5-18
得分:0 
回复 8楼 beyondyf
虽然新手现在一时看不懂大神的代码,但觉得大神的代码挺有意思的,计算也没花多少时间,
比起用递归算,快多了.
不过小弟还是不晓得用排列组合错在哪儿
看来小弟还要多多努力啊
2013-05-25 14:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-407951-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020243 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved