農民約翰有三個容量分別是a,b,c公升的桶,a,b,c分別是三個從1到20的整數,最初,a和b桶都是空的,而c桶是裝滿牛奶的。有時,約翰把牛奶從乙個桶倒到另乙個桶中,直到被灌桶裝滿或原桶空了。當然每一次灌注都是完全的。由於節約,牛奶不會有丟失。 寫乙個程式去幫助約翰找出當a桶是空的時候,c桶中牛奶所剩量的所有可能性。
單獨的一行包括三個整數a,b和c。
只有一行,列出當a桶是空的時候,c桶牛奶所剩量的所有可能性。
8 9 10
1 2 8 9 10最開始的時候想簡單了,後來細想發現一共有6種方式,12種情況。
1)6種方式分別為:
a->b,b->a;
a->c,c->a;
b->c,c->b;
2)12種情況是因為:
每種方式都有兩種可能,如第一種情況a->b(把a桶往b桶裡倒),依題僅有兩種情況停止:
要麼把a倒空,要麼b被倒滿。其他方式也是如此,所以一共有12種情況。
把這6種方式,12種情況想清楚了就很好做了,設二維陣列logo[a][b]來標記該a,b桶裡剩餘量的情況是否出現過,若出現過則無需再繼續下去,另設陣列s存所有c桶可能出現的牛奶量。
#include#include#include#include#define fori(a,b) for(int i=a;i<=b;i++)
#define forj(a,b) for(int j=a;j<=b;j++)
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
int va,vb,vc,k=0,logo[21][21],s[1000000];
void dfs(int a,int b,int c)
int main()
return 0;
}
與第一種思路大致相同,區別就在於用map進行了優化,同時二維陣列logo[a][b]的值不再是僅僅標記此情況是否出現過,它的值表示的是a,b桶量固定時,此時c桶的牛奶量。
#include#include#include#include#includetypedef long long ll;
#define fori(a) for(ll i=0;im;
int logo[30][30];
void init()
void dfs(int x,int y,int z)
int main()
Mother s Mil 母親的牛奶
農民約翰有三個容量分別是a,b,c公升的桶,a,b,c分別是三個從1到20的整數,最初,a和b桶都是空的,而c桶是裝滿牛奶的。有時,約翰把牛奶從乙個桶倒到另乙個桶中,直到被灌桶裝滿或原桶空了。當然每一次灌注都是完全的。由於節約,牛奶不會有丟失。寫乙個程式去幫助約翰找出當a桶是空的時候,c桶中牛奶所剩...
Mother s Mil 母親的牛奶
農民約翰有三個容量分別是a,b,c公升的桶,a,b,c分別是三個從1到20的整數,最初,a和b桶都是空的,而c桶是裝滿牛奶的。有時,約翰把牛奶從乙個桶倒到另乙個桶中,直到被灌桶裝滿或原桶空了。當然每一次灌注都是完全的。由於節約,牛奶不會有丟失。寫乙個程式去幫助約翰找出當a桶是空的時候,c桶中牛奶所剩...
14 4 選單功能
選單功能就是與使用者的溝通介面。1 在workermanager.h標頭檔案中新增show menu 成員函式。class workermanager 2 在workermanager.cpp中實現show menu 成員函式。其實這個函式就是在螢幕中把選單介面列印出來,沒什麼技術含量。顯示選單 v...