在c++中,怎么实现(cin>>n)来判断是否继续输入……
实际上这是一道很简单的acm题,但是我不会做……描述一个凸N边形,通过不相交于N边形内部的对角线,把N边形拆分成若干个三角形,不同拆分方案的数目用Hn表示,Hn就是Cat...
实际上这是一道很简单的acm题,但是我不会做……
描述
一个凸N边形,通过不相交于N边形内部的对角线,把N边形拆分成若干个三角形,不同拆分方案的数目用Hn表示,Hn就是Catalan数.
例如N=5的时候Hn=5(自己画画);
可以发现对于N条边的图形,可以利用递归式求解,现在已知递归式如下:
Hn+1=h2*hn+h3*hn-1+...+hn-1*h3+hn*h2;h2=1;
请写程序求Hn.
输入
输入有多组数据,每组数据一行,包含一个整数N。(提示:(cin>>n)的布尔值表示文件是否结束。)
输出
对于每组数据,输出一行,包含Hn.
样例输入
5样例输出
5 展开
描述
一个凸N边形,通过不相交于N边形内部的对角线,把N边形拆分成若干个三角形,不同拆分方案的数目用Hn表示,Hn就是Catalan数.
例如N=5的时候Hn=5(自己画画);
可以发现对于N条边的图形,可以利用递归式求解,现在已知递归式如下:
Hn+1=h2*hn+h3*hn-1+...+hn-1*h3+hn*h2;h2=1;
请写程序求Hn.
输入
输入有多组数据,每组数据一行,包含一个整数N。(提示:(cin>>n)的布尔值表示文件是否结束。)
输出
对于每组数据,输出一行,包含Hn.
样例输入
5样例输出
5 展开
展开全部
恩 ,不难,函数里面用迭代和循环就可以了。
cin>>n说了是bool,就是说n=0是时候就退出。
while(1)
{
cin>>n;
if(!n)return;//or break;depend on your program.
//todo...your code
}
cin>>n说了是bool,就是说n=0是时候就退出。
while(1)
{
cin>>n;
if(!n)return;//or break;depend on your program.
//todo...your code
}
追问
你能帮我把具体的代码写一下吗?谢谢啦!
追答
看下吧,这个是循环一直输入,直到你输入0或非数字则退出。对了,算法复杂度也很大,特别是函数的迭代调用,由于这个比指数级增长,而我用的是int,数字稍微大了就会算很久,而且int显然会溢出。呵呵
#include
using namespace std;
int CatalanN(int n);
int main()
{
int n=0;
while(1)
{
cout>n;
if(!n)return 0;//or break;depend on your program.
cout<<"the catalan number of "<<n<<" is: "<<CatalanN(n)<<endl;
n=0;//这个只为退出输入非数字使用。
}
return 0;
}
int CatalanN(int n)
{
int sum=0;
if(n==2)return 1;
for(int i=2;i<n;i++)
{
sum+=CatalanN(i)*CatalanN(n-i+1);
}
return sum;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询