c语言编程找错,上楼梯问题 一次上1格或2格的走法种类

c语言编程找错,上楼梯问题 一次上1格或2格的走法种类,第1张

数字超出界限了,唉搞了这么久终于搞出来

只要把类型变一下就行,其他不用改

换成float或者double类型,最好是double,因为阶乘这东西可是天文数字啊

望采纳

# include <stdioh>

int n;

void main()

{

float fac (float a,float b);

float x,y;

float sum;

printf("please input the step number:");

scanf("%d",&n);

sum=fac(x,y);

printf("%f\n",sum);

}

float fac (float a,float b)

{

float comb(float j);

float w=0;

for (a=0;a<=n;a++)

{

for (b=0;b<=n/2;b++)

if (a+2b==n)

{

w+=comb(a+b)/(comb(a)comb(b));

}

}

return w;

}

float comb (float j)

{

if (0==j) return 1;

else return (jcomb(j-1));

}

简单的dp问题:

#include

int step[2048];

int p = step;

void foo(int n)

{

if(n > 0) {

if(n > 1) {

p++ = 2;

foo(n-2);

--p;

}

p++ = 1;

foo(n-1);

--p;

} else {

for(int k = step; k != p; ++k)

printf("%d ",k);

putchar('\n');

}

}

int main()

{

foo(5);

}

#include<iostream>

#include<string>

using namespace std;

const int num=10000;//这是数字位数最大值

int n,i,a[5001][num]={{0,0}};//注意,算出来的可都是倒着写的数字,下标是0的是最低位

int main()

{

char b[num];//做中间变量

int ctoi_array(char [num],int [num]);

char itoc_array(int [num],char [num]);

memset(b,0,sizeof(b));

     cin >> n;

     if(n==1){cout << 1;exit(0);}

     if(n==0){cout << 0;exit(0);}

     a[0][0]=1;

     for(i=1;i<=n;i++)

       if(i==1)a[i][0]=1;

       else

       {

  int k=0;

  itoc_array(a[i-1],b);

  int len=strlen(b);

for(k=0;k<len;k++)

a[i][k]=a[i-1][k]+a[i-2][k];//各个位数相加

for(k=0;k<=len+2;k++)

if(a[i][k]>9)

{

a[i][k]-=10;

a[i][k+1]+=1;

}//进位

       }

  itoc_array(a[n],b);

     cout << strrev(b);

     return 0;

}

int ctoi_array(char a[num],int b[num])//字符数组转换成整形数组

{

int i=0;

for(;a[i]!='\0';i++)

b[i]=a[i]-'0';

return b;

}

char itoc_array(int a[num],char b[num])//整型数组转化成字符型数组

{

for(int i=num-1;a[i]==0;i--);

b[i+1]='\0';

for(;i>=0;i--)

b[i]=a[i]+'0';

return b;

}

递归实现。。。

重要的是理解这个逻辑,

第n布,走一步,即n-1,再求n-1个阶梯的走法,

走两步,即n-2,再求n-2个阶梯的走法,

以此,n级阶梯的走法是n-1个阶梯的走法与n-2个阶梯的走法的和。

public int GetStepNum(int n)

{

if(n<1) throw new Exception();

if(n==1) return 1;

if(n==2) return 2;

if(n>2)

return GetStepNum(n-1)+GetStepNum(n-2);

}

改了点,更有效率:

#include<stdioh>

main()

{int i;<br/> for(i=7;;i=i+7)<br/> if(i%3==2 && i%5==4 && i%6==5)<br/> {printf("%d\n",i);break;}

}

若以每步走两级则最后剩一级,若以每步走三级则剩两级,若以每步走四级则剩三级,若以每步走五级则剩四级,若以每步走六级则最后剩五级

那么整个级数可表示为(K654321-1)即(720K-1)(K为整数)

又若每步走七级“刚好不剩”所以还是7的倍数

可以简单的凑一下就得到了K的最小值是6

总级数是4319

以上就是关于c语言编程找错,上楼梯问题 一次上1格或2格的走法种类全部的内容,包括:c语言编程找错,上楼梯问题 一次上1格或2格的走法种类、爬楼梯问题--有n阶台阶,上楼可以一步上1阶,2阶,3阶,计算共有多少种不同的走法、C++ 数楼梯问题,一次只能过6个点 求大神帮忙等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9708125.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存