演算法題 水杯倒水的問題

2021-09-23 21:25:19 字數 1994 閱讀 5835

之前好像在看到這樣的題目:

1.有3個容器,各是20公升,13公升,7公升, 形狀不同也不透明。一開始20公升的容器裡面裝了20公升水,反正倒來倒去最後要讓20公升和13公升容器各裝了10公升水

2. 2個外形不同的瓶子,各裝800毫公升水,另外還有1個300毫公升的杯子

現在有4個人,不限制喝的次數,想辦法讓每個人都正好喝到400毫公升水

第一第二道題目,口頭說明解法就行了 

第三個題,就是從第一第二題裡面隨便選擇乙個,使用程式設計來求解

於是乎..覺得有趣.便做了起來...花了乙個下午的時間..終於做出來了:

首先建了乙個水杯類: //以下程式只是基於可執行..至於**的可看性和效能,暫時還沒做優化

public class cut

}private int _currentvalue;//杯子當前值

public int currentvalue

set}

public cut(int maxvalue,int currentvalue)

}然後在控制台程式環境下:

class program

static bool getdirection(int currentvalues)//true表示可以繼續下一次[節點不存在],false則反之[表示節點存在]

int count = 0;

for (int i = 0; i < valuelist.count; i++)

}else}}

return true;

}static void changecut(ref cut c1, ref cut c2, ref cut c3)

radomcut(ref c1, ref c2, ref c3, out cuta, out cutb);//隨機取兩個杯交換}}

static void radomcut(ref cut c1, ref cut c2, ref cut c3, out  cut c11, out cut c12)//隨機產生兩個杯

else if (result == 1)

else

int result2 = rd.next(3);

while (result2 == result)//用於產生不和上面重複的值

if (result2 == 0)

else if (result2 == 1)

else

}static bool changetwocut(ref cut c1, ref cut c2)

))else  //走右邊))}

if (result)

else //失敗,還原值

return result;

}static void getchangedvalue(cut c1, cut c2, out int valuea, out int valueb, bool atob)//兩種情況,一種a的值給b,一種b的值給a

else if (c1.currentvalue == c1.maxvalue)

else

}else if (c2.currentvalue == 0)

else if (c2.currentvalue == c2.maxvalue)

else

}else //非邊界值時

else//b的值給a時}}

static void getresult() //新增正確步驟或顯示結果

;valuelist.add(newvalue);

console.writeline("結果已出如下:");

for (int i = 0; i < valuelist.count; i++)

console.readline();

}else

;valuelist.add(newvalue);

console.writeline(newvalue[0].tostring() + ":" + newvalue[1].tostring() + ":" + newvalue[2].tostring());}}

}

演算法題 水杯倒水的問題

本文將介紹以下內容 1.引言 上回 第八回 品味型別 值型別與引用型別 上 記憶體有理 的發布,受到大家的不少關注,我們從記憶體的角度了解了值型別和引用型別的所以然,留下的任務當然是如何應用型別的不同特點在系統設計 效能優化等方面發揮其作用。因此,本回是對上回有力的補充,同時應朋友的希望,我們盡力從...

3水杯倒水問題

問題 給出三個杯子的容量abc 其中剛開始時c杯是滿的,ab是空的。現在在保證不會有漏水的情況下進行如下操作 將乙個杯子x的水倒到另乙個杯子y中,如果x空了或者y滿了就停止 滿足其中乙個條件才停下 現問c中水量有多少種可能性 a,b,c為非負整數 解法1 數論,擴充套件歐幾里得 待補充解法2 模擬倒...

廣度優先搜尋 水杯倒水問題

三個水杯 時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 給出三個水杯,大小不一,並且只有最大的水杯的水是裝滿的,其餘兩個為空杯子。三個水杯之間相互倒水,並且水杯沒有標識,只能根據給出的水杯體積來計算。現在要求你寫出乙個程式,使其輸出使初始狀態到達目標狀態的最少次數。輸入 第...