第一周作業 倒水

2021-10-03 08:23:39 字數 1935 閱讀 9562

題目描述:

倒水問題 「fill a」 表示倒滿a杯,"empty a"表示倒空a杯,「pour a b」 表示把a的水倒到b杯並且把b杯倒滿或a倒空。

輸入:輸入包含多組資料。每組資料輸入 a, b, c 資料範圍 0 < a <= b 、c <= b <=1000 、a和b互質。

輸出:你的程式的輸出將由一系列的指令組成。這些輸出行將導致任何乙個罐子正好包含c單位的水。每組資料的最後一行輸出應該是「success」。輸出行從第1列開始,不應該有空行或任何尾隨空格。

sample input:

2 7 5

2 7 4

sample output:

fill b

pour b a

success

fill a

pour a b

fill a

pour a b

success

題目思路:

這個題目看起來無厘頭,但是實際上可以看成是乙個迷宮的問題,起點是(0,0),終點座標中橫座標或者縱座標裡包含了c這個數,如(x,c)或(c,y),每次走的點並不是往四周走乙個點,而是像上面說的那樣,如果橫座標是a,縱座標是b:

fill a:意味著橫座標從當前到最大,縱座標不變。

fill b:意味著縱座標從當前到最大,橫座標不變。

empty a:意味著橫座標清零,縱座標不變。

empty b:意味著縱座標清零,橫座標不變。

pour a b:意味著橫座標減少縱座標增加,直到b滿或者a空為止。

pour b a:意味著縱座標減少橫座標增加,直到a滿或者b空為止。

if

(!vis[ca]

[b])if(

!vis[a]

[cb])if

(!vis[0]

[b])if(

!vis[a][0

])int c=a+b>ca?ca:a+b;if(

!vis[c]

[a+b-c]

) c=a+b>cb?cb:a+b;if(

!vis[a+b-c]

[c])

這樣就和迷宮問題一樣,建立乙個佇列,然後不斷的通過以上方式加入點,記錄下每一步操作,直到出現了需要的容量,然後按序輸出就可以了

**如下:

#include

#include

#include

using

namespace std;

int ca,cb,n;

bool vis[

4000][

4000];

struct node

node

(int qa,

int qb,string ss)};

queue qu;

void

bfs(

) cout<<

"success"

<

return;}

//以下見上面分析if(

!vis[ca]

[b])if(

!vis[a]

[cb])if

(!vis[0]

[b])if(

!vis[a][0

])int c=a+b>ca?ca:a+b;

//看看倒入之後是否是滿,滿就取最大,不滿就全倒進去if(

!vis[c]

[a+b-c]

) c=a+b>cb?cb:a+b;

//同上if(

!vis[a+b-c]

[c])

}return;}

intmain()

return0;

}

執行結果:

第一周作業

專案shrinkwrap games operating systems 這些軟體是怎麼說服你 陌生人 成為他們的使用者的?他們的目標都是盈利麼?通過廣告 老使用者口碑推薦 實體店推薦等方式發展新使用者,目標一般是盈利的,賺取使用者現金。通過廣告 老使用者口碑推薦等方式發展新使用者,目標一般是盈利的...

第一周作業

我的乙個小目標 7月13下午15.58分,我不遠千里踏上了北上求學謀生之路 年近快30歲的我深深的感到了孔子所謂的男人三十而立的壓力,從小到大父母對我的要求和期望都比較大,而我總是讓他們失望,一直都是一事無成,有的時候我都在質問自己甚至心中還有一絲幻想,如果時光能倒退從來我以前一定好好學習,考乙個好...

第一周作業

1 常見linux的發行版有哪些?並描述不同發行版之間的聯絡與區別 主要分redhat系列和debian系列。不同發行版本之間的區別是包管理工具的不同 redhat系列 redhat centos,fedora debian系列 linux mint ubuntu,debian gnu linux ...