C++ POW结果为0 求解惑

#include<iostream>#include<cmath>usingnamespacestd;intJC(intn){intp;if(n==0||n==1)p=1... #include <iostream>
#include <cmath>
using namespace std;

int JC(int n)
{
int p;
if(n==0||n==1)
p=1;
else
p=n*JC(n-1);
return p;
}

int main()
{int n,a,b,c;

for(;n<=1000 && cin>>n;)
{

int n1,n2,n3,sum=0,A1=0,A2=0;

for(n1=0;n1<=24;n1++)
for(n2=0;n2<=24;n2++)
for(n3=0;n3<=24;n3++)
{
if(n1+2*n2+3*n3==24)
{
if((n1+n3)*n2==0&&(n1+n2)*n3==0)
A1=A1+1;
else
A2+=JC(n1+n2+n3)/(JC(n1)*JC(n2)*JC(n3));
}
}
sum+=A1+A2;
a=pow(sum,n-1);
b=1e9+7;
c=a%b;

cout<<c;
}

}
Problem:
SJ去上课,他从第一层开始爬,他的教室在第n层,每两层之间有24格楼梯,SJ每次可以爬1格或者2格或者3格。问SJ到教室有几种上楼方法。

PS:SJ爬楼梯的时候都要在每层楼停留一下,即每次他最多连续爬24格。
对最后的数据取摸 1e9+7
展开
 我来答
旅春冬TJ
2013-12-15 · TA获得超过1082个赞
知道大有可为答主
回答量:1271
采纳率:66%
帮助的人:494万
展开全部

如果我没猜错就是计算一层的即可,然后进行n次幂就是最后的结果,好像你的思想不太对。我把思想封装成了一个函数,看看对不对

int caculate(int n)//n as the floor number
{
int step_1 = 1,step_2 = 2,step_3 = 3;//step number
int i,j,k;
int counter = 0;// to count the ways which one floor have

for(i = 0; i <= 24; i++)//if use one unit step,24 stairs [0,24]
{
 for(j = 0; j <= 12; j++)//if use two as unit step,24 stairs [0,12]
  {
     for(k = 0; k <= 8; k++)//if use three as unit step,24 stairs [0,8]
 {
 if((i * step_1 + j * step_2 + k * step_3) == 24)
 {
    counter++;
 }
 }
   }
}
return pow(counter,n);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式