捷游公司笔试题目,关于游戏中打副本的问题!求好的解法!
在打副本的时候,已知一共有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; }