C語(yǔ)言小程序之沒(méi)事爬樓梯

題目

有39級(jí)臺(tái)階,每一步只能走1階或者2階。
如果需要走偶數(shù)步,求上臺(tái)階的方案數(shù)。

分析

拿到題目就是一通分析,39是奇數(shù),一次走1階或者兩階。。。
那么就有:1*x+2y=39,x得是個(gè)奇數(shù)。。。
要求走偶數(shù)步,那y也得是奇數(shù)。。。

代碼

#include <stdio.h>
int main()
{
    // 39個(gè)臺(tái)階, 分類(lèi)數(shù), 方案數(shù)
    int number = 39, count = 0;
    // 走了1階的次數(shù)
    for(int i=0; i<=number; i++)
    {
        // 1階偶數(shù)次的排除
        if(i%2==0)
            continue;
            
        // 2階奇數(shù)次的留下
        if((number-i)%4!=0)
        {
            count++;
        }
    }
    printf("共有%d套方案可選擇\n", count);
}

天才有木有→_→

后來(lái)才發(fā)現(xiàn),自己想簡(jiǎn)單了,題目要求上臺(tái)階的方案數(shù),上面的結(jié)果明顯不是。
上面的結(jié)果只是一階和二階的數(shù)目,還需要對(duì)他們進(jìn)行排序。。。比如:

  • 1222222....
  • 2122222....

是兩個(gè)不同的方案。

后悔數(shù)學(xué)沒(méi)學(xué)好

m個(gè)1和n個(gè)0進(jìn)行排序,有多少排序方式。。。
當(dāng)時(shí)就難住我了,后來(lái)求助得到答案:

int func(int m, int n)
{
   if(m==0 || n==0) return 1;
   return func(m-1, n) * (n+m)/m;
}

最終代碼

#include <stdio.h>

int func(int m, int n)
{
   if(m==0 || n==0) return 1;
   return func(m-1, n) * (n+m)/m;
}

int main()
{
    // 39個(gè)臺(tái)階, 分類(lèi)數(shù), 方案數(shù)
    int number = 39, count = 0, sum = 0;
    // 走了1階的次數(shù)
    for(int i=0; i<=number; i++)
    {
        // 1階偶數(shù)次的排除
        if(i%2==0)
            continue;
            
        // 2階奇數(shù)次的留下
        if((number-i)%4!=0)
        {
            count++;
            // 1階i次, 2階(number-i)/2次
            int ber = func(i, (number-i)/2);
            sum += ber;
            printf("分類(lèi)%2d:1階%2d次, 2階%2d次. 共%3d種方法\n", count, i, (number-i)/2, ber);
        }
    }
    printf("共有%d類(lèi), %d套方案可選擇\n", count, sum);
}

結(jié)果

圖片發(fā)自簡(jiǎn)書(shū)App
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容