捷游公司笔试题目,关于游戏中打副本的问题!求好的解法!
在打副本的时候,已知一共有N个怪物!玩家一次可以杀1个,也可以杀两个。把这N个杀完,一共有多少中杀法!我用递归写了一个算法。但是输出的时候会有一点点的问题! 现在求一个完整的算法!
[ 本帖最后由 lchpersonal 于 2012-10-25 16:21 编辑 ]
程序代码:#include "stdafx.h"
#include"iostream"
using namespace std;
int main()
{
double fun(int k);
int i,j,n,b;
double count=0,c;
cout<<"input the number of monster:";
cin>>n;
for(i=1;i<=n;i++) //每次只杀一只怪这里不计算
{
for(j=1;j<=int(n/2);j++) //每次杀两只怪这里也不计算
{
if(i+2*j==n) //这里算出杀一只怪和杀两只怪的次数
{
c=fun(i+j)/(fun(i)*fun(j)); //这里用排列组合的方法算出每种组合的种数
cout<<"i="<<i<<",j="<<j<<",c="<<c<<endl;
count+=c; //累加求出种数
}
}
}
if(n%2==0) //若为偶数只怪,最后结果加2种
{
b=2;
}
else //否则只加一种
{
b=1;
}
cout<<"there are "<<count+b<<" ways to kill those monster!"<<endl;
system("pause");
return 0;
}
double fun(int k) //算阶乘的函数
{
int i;
double m=1;
for(i=1;i<=k;i++)
m*=i;
return m;
}看到楼主的帖子我就有要写出程序的欲望。。。
程序代码:#include<iostream>
#include <Windows.h>
using namespace std;
void Print(int n){
if(n==0)
return ;
if (n>=2)
{
cout<<"2 ";
Print(n-2);
}
if (n>=1)
{
cout<<"1 ";
Print(n-1);
}
cout<<endl;
}
int main(){
int n=0;
for(;printf("请输入怪物个数n:"),scanf("%d",&n),n ;Print(n));
return 0;
}
