![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
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 展开
#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 展开
1个回答
展开全部
如果我没猜错就是计算一层的即可,然后进行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);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询