重新拾起遞迴

2021-09-12 09:56:01 字數 2801 閱讀 2214

重新拾起遞迴

t1倒牛奶農民約翰有三個容量分別是a,b,c公升的桶,a,b,c分別是三個從1到20的整數,

最初,a和b桶都是空的,而c桶是裝滿牛奶的。有時,約翰把牛奶從乙個桶倒到另乙個桶中,直到被灌桶裝滿或原桶空了。當然每一次灌注都是完全的。由於節約,牛奶不會有丟失。

寫乙個程式去幫助約翰找出當a桶是空的時候,c桶中牛奶所剩量的所有可能性。

輸入格式 input format

單獨的一行包括三個整數a,b和c。

輸出格式 output format

只有一行,公升序地列出當a桶是空的時候,c桶牛奶所剩量的所有可能性。

樣例輸入 sample input

sample input 1

8 9 10

sample input 2

2 5 10

樣例輸出 sample output

sample output 1

1 2 8 9 10

sample output 2

5 6 7 8 9 10

時間限制 time limitation

1s注:

顯而易見,這是一道遞迴題。首個狀態是a、b桶是空的,c是滿的。現在我們要求的是當a桶為空的時候,所有c桶的可能性。那麼我們需要乙個遞迴來完成這個倒牛奶的過程。然而,問題來了,當我們發現a桶為空的時候,怎麼確定這時候的c的情況是否已經找到了呢?並且,遞迴結束的條件是什麼呢?仔細一想,如果我們只考慮a空來結束遞迴,那第一重就會結束。可是這道題不像之前的,有什麼邊界限制。那麼我們只能用乙個bool型的陣列來記錄我們已經找過的情況,如果所有的情況找到了,那麼就結束遞迴。因為是三個桶的狀態,所以我們需要乙個三維的陣列。

偽**:

void fac(int a,int b,int c)

if(f[a][b][c])

return ;

f[a][b][c]=1;

if(a==0)

n[c]=1;

if(a-a>=c&&c>0)

fac(a+c,b,0);

else if(a-a0)

fac(a,b,c-(a-a));

if(b-b>=c&&c>0)

fac(a,b+c,0);

else if(b-b0)

fac(a,b,c-(b-b));

if(b-b>a&&a>0)

fac(0,b+a,c);

else if(b-b0)

fac(a-(b-b),b,c);

if(c-c>a&&a>0)

fac(0,b,c+a);

else if(c-c0)

fac(a-(c-c),b,c);

if(a-a>b&&b>0)

fac(a+b,0,c);

else if(a-a0)

fac(a,b-(a-a),c);

if(c-c>b&&b>0)

fac(a,0,c+b);

else if(c-c0)

fac(a,b-(c-c),c);

return;

#includeusing

namespace

std;

inta,b,c;

int n[30

];bool f[30][30][30

];int

x;bool a1=1,a2=1,a3=1,a4=1,a5=1,a6=1

;void fac(int a,int b,int

c)

if(a-a>=c&&c>=0

) fac(a+c,b,0

);

else

if(c-(a-a)>=0&&c>=0

) fac(a,b,c-(a-a));

if(b-b>=c&&c>=0

) fac(a,b+c,0

);

else

if(c-(b-b)>=0&&c>=0

) fac(a,b,c-(b-b));

if(a-a>=b&&b>=0

) fac(a+b,0

,c);

else

if(b-(a-a)>=0&&b>=0

) fac(a,b-(a-a),c);

if(c-c>=b&&b>=0

) fac(a,

0,c+b);

else

if(b-(c-c)>=0&&b>=0

) fac(a,b-(c-c),c);

if(c-c>=a&&a>=0

) fac(

0,b,c+a);

else

if(a-(c-c)>=0&&a>=0

) fac(a-(c-c),b,c);

if(b-b>=a&&a>=0

) fac(

0,b+a,c);

else

if(a-(b-b)>=0&&a>=0

) fac(a-(b-b),b,c);

return

;

}int

main()

view code

最終將bool n陣列裡面的true的下標都輸入就可以了。

2018-03-14 09:15

kgxpbqbyt 閱讀(

...)

編輯收藏

重新拾起VS2008加入戰鬥

前3個月沒有很系統的來學習c 這次考試更是考的非常的糟糕感覺自己對不起很多人,特別是自己.今天同學過來,結果三個月的專案經驗,感覺已經提供了好多的了,今天正好是考研的日子,想想自己,學習沒學好,程式上也沒學好,真的不知道自己該怎麼辦的好.買了30號的票,不想太早回家,發現自己真的沒臉回家,最近幾天好...

Djago模板拾起

在view中使用template 首先在settings.py中配置模板檔案的路徑。template dirs home django mysite templates 1.變數的使用 2.條件語句使用 if 可以使用and,or,not來組織你的邏輯。但不允許and和or同時出現的條件語句中。沒有...

我想拾起英語了。

倆次的六級考試失敗讓我這次放棄了參考六級,在放棄了 後,我也放棄了學習英語,想著花精力與時間在專業課上,近期發現,我現在的英語程度,連四級都達不到,然後有一種想要重新學學單詞的想法了,不為別的,也算是自己的乙個小興趣,乙個小目標吧!再來說說自己這段時間準備的軟體設計師,emmmmm對於信管專業,軟體...