當前位置:首頁 » 編程語言 » 一個樓梯有n個台階c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

一個樓梯有n個台階c語言

發布時間: 2023-04-04 02:44:27

① 用c語言求從1階到n階樓梯可能用的方法數量,一次只能走一個或3個樓

這個問題應該這么考慮

  1. 對於1和3看作兩種不同種類的物體,n可以包含K1個1和K2個3,這時候他們的方法數量為(K1 + K2)!/K1!/K2!

  2. 然後遍歷所有的K1和K2的組合,於是可得最終的方法數。

示例如下(手寫可能存在錯漏,但是基本邏輯沒有問題)

void main()

{

long n;

printf("Please input n: "

do {

scanf("%ld", &n);

if (n <= 0 || n > 100000)

printf("Input error, please input n again: ");

else

break;

}while (1);


long totalTime = 0;

for (int i = n , j = 0; i >= 0; i -= 3, j += 1)

{

long curTotalTime = 1;

int k = 0;

for (k = (i + 1); k < (i + j); k++)

curTotalTime = k *curTotalTime ;

for (k = 2; k <= j; k++)

curTotalTime = curTotalTime / k ;

totalTime +=curTotalTime ;

}

printf("The number of method is %ld", totalTime);

}

② C++ 爬樓梯問題 n級樓梯,每次可以爬1,2,3級,一共步數為m

#include<iostream>
#include<string>
usingnamespacestd;

intn,m;//由題,n為級數,m為步數
longlongcnt=0;//統計情況總數
voiddfs(intstep_climb,stringans,intleft)//step_climb為已經走了幾步
{//ans為最後輸出的字元串答案,left為剩餘的台階級數

if(step_climb>m||left<0)//如果走了不止m步或者走過頭(台階剩昌爛余為負)
{
return;
}
if(step_climb==m&&left==0)//如果正好走m步並且沒有台階剩餘
{
ans.erase(ans.begin());//刪去多餘的-連接號
cout<<ans<<endl;//輸出答案
cnt++;//計數器晌燃+1
return;
}

dfs(step_climb+1,ans+"-1",left-1);//向三種情況遞歸搜宴迅虛索,ans添加當前這一步的級數
dfs(step_climb+1,ans+"-2",left-2);
dfs(step_climb+1,ans+"-3",left-3);
}

intmain()
{
cin>>n>>m;
dfs(0,"",n);
cout<<"一共有"<<cnt<<"種情況"<<endl;
}

若有疑問歡迎回復

③ 樓梯有n階台階,上樓可以一步上1階,也可以一步上2階,用C++或lua語言編一程序計算共有多少種不同的走法

intrecursive(intn)
{
if(n<=2)
returnn;
returnrecursive(n-1)+2*recursive(n-2);
}


intiterative(intn)
{
intf1=1,f2=2,f;
for(inti=3;i<=n;++i)
{
f=f2+2*f1;
f1=f2;
f2=f;
}
returnf;
}

④ c語言 設計 爬樓梯的方法

我是學pascal的~只說得上來演算法。
你說的
爬樓梯
是指有n階樓梯,每次可以上1,2……,p階(1<=p<=n),問走到最上面有多少種不同的走法吧?
這個就是
遞推
啊~
設上i級台階共有f(i)種不同的方法,很簡單就可以知道f(1)=1,f(2)=2……
當i大於2時,分n種情況討論:第一步上了1級台階,第一步上了2級台階,……第一步上了n級台階。
如果第一步上了1級樓梯,那麼還剩下i-1級樓梯,要走完這i-1級樓梯,一共有f(i-1)種方法。
如果第一步上了2級樓梯,那麼還剩下i-2級樓梯,要走完這i-2級樓梯,一共有f(i-2)種方法。
……
如果第一步上了n級樓梯,那麼還剩下i-n級樓梯,要走完這i-2級樓梯,一共有f(i-n)種方法。
所以,在第一種情況下有f(i-1)種不同走法,第二種情況有f(i-2)種不同走法……這n種情況既沒有重復方案,也沒有遺漏,因此得出f(i)=f(i-1)+f(i-2)+……+f(i-n)
接著就行了,200階樓梯都不成問題。

⑤ c語言求助:爬樓梯,可以一次一步,也可以一次兩步,走n級樓梯共有多少種方法下面的程序說明地方錯了

#include <stdio.h>

int count(int n)
{
int i,j,sum=0,a,c1,c2,d1,d2;
if(n>0)
for(i=0;i<=n;i++)
for(j=0;j<=n/2;j++)
if(n==i+2*j)
{
c1=i+j;
d1=1;
c2=1;
d2=1;
for(a=0;a<i;a++)
{
c2*=c1--;
d2*=d1++;
}
sum+=c2/d2;
}
return sum;
}
void main()
{
int m,n;
printf("請輸入樓梯階數:");
scanf("%d",&n);
m=count(n);
printf("總共有%d種走法\n",m);
}

⑥ 有n階階梯,每步可走1階或2階,求每一步走法,和有多少種走法,用C語言編程

其實就是數學的排列組合的問題。對排列組合求和。

我就不列出是怎樣的排列了,就列出有幾類排列組合,還有結果。

#include<stdio.h>
#include<stdlib.h>

inlinelongA(inta1,inta2)
{
intr=1;
for(inti=0;i<a2;i++)
r*=a1--;
returnr;
}

inlinelongC(intc1,intc2)
{
doubler=1;
intnc2=c2;
for(inti=0;i<c2;i++)
{
r*=c1--;
if(nc2>0)r/=nc2--;
}
return(long)r;
}

intmain()
{
intn;
longsum=0;//階級數,結果
intmax2;//最大2步數
intnums1,nums2;//1的個數,2的個數
inti;
printf("stairs:0<n<40 ");
scanf("%d",&n);
if(n%2==0)
max2=n/2;
else
max2=(n-1)/2;
printf("maxstep2:%d ",max2);
for(i=0;i<=max2;i++)
{
inttemp;
nums2=i;
nums1=n-nums2*2;
printf("step1:%d,step2:%d ",nums1,nums2);
temp=C(nums1+nums2,nums2);//;sum+=C(nums1+nums2,nums1);
printf("ways:%d ",temp);
sum+=temp;
}
printf("finalways:%d ",sum);
return0;
}

⑦ C語言編程 台階問題

這是一道高精度的題目。
首先,題目要求每次允許上一個或兩個台階,實際上每個樓梯只要把前兩個樓梯的值相加就可以了(也可以認為是一個斐波那契數列),但是100個樓梯會超出long long 只能使用高精度了。

或者還可以使用通項公式(高中內容)

⑧ c語言計算走階梯、

#include<stdio.h>
intf(intn)
{
if(n==1)return1;
elseif(n==2)return2;
elseif(n<3)return0;
else
{
returnf(n-1)+f(n-2);
}
}
voidmain()
{
intn;
printf("請輸入樓梯階數: ")
scanf("%d",&n);
printf("%d ",f(n));
}

⑨ 用C++編程解決:設一個共有n級的階梯,某人可走1級,也可走2級,也可走3級,要走上n級共有幾種走法

lz 你好


具體代碼如下:

(有注釋)

#include<iostream>寬賀
usingnamespacestd;

intmain()
{
intone,two,three,n,count=0;
//分別表示:走1、2、3級的步數總階數種數

cout<<"輸入階梯數n:";
cin>>n;

//遍歷所有的可能性
for(one=0;one<=n;one++)
{
for(two=0;two<=n/2;two++)
{
for(three=0;three<=n/3;three++)
{
intsum=one*1+two*2+three*3;

//滿足條件的輸出
if(sum==n)
{
cout<<"("<<one<<","<<two<<","碼源<<three<<")"<<endl;
count++;
}
}
}
}

cout<<"共有"<<count<<"種"<<endl;
return0;
}



運行結慎模派果:


希望能幫助你哈

⑩ C語言問題,台階問題編程

#include<stdio.h>

intfuck(intn,intm)
{
if(n==1||n==0)return1;
if(n<0)return0;
inttotal=0;
inti=1;
for(;i<m;++i)
{
total+=fuck(n-i,m);
}
returntotal;
}
intmain()
{
inta;
scanf("%d",&a);
intn[a];
inti;
for(i=0;i<a;++i)
{
scanf("%d",&n[i]);
}
intb;
scanf("%d",&b);
intm[b];
for(i=0;i<a;++i)
{
scanf("%d",&n[i]);
}
for(i=0;i<a&&i<b;++i)
{
printf("%d",fuck(n[i],m[i]));
}
return0;
}

沒編譯器,你先編譯試試,應該沒錯

望採納~