練習二 1017 非常可樂

2021-07-11 07:40:54 字數 1498 閱讀 1663

題目:

大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m 毫公升 可樂的體積為s (s<101)毫公升 (正好裝滿一瓶) ,它們三個之間可以相互倒可樂 (都是沒有刻度的,且 s==n+m,101>s>0,n>0,m>0) 。聰明的acmer你們說他們能平分嗎?如果能請輸出倒可樂的最少的次數,如果不能輸出"no"。

input

三個整數 : s 可樂的體積 , n 和 m是兩個杯子的容量,以"0 0 0"結束。

output

如果能平分的話請輸出最少要倒的次數,否則輸出"no"。

sample input

7 4 3

4 1 3

0 0 0

sample output

no3

題意:三個杯子之間倒可樂,直到可樂僅存在於其中兩個杯子,切兩個杯子中的可樂一樣多。

解題思路:使m的值大於n的值;

初始狀態,m,n杯中可樂體積為0,s杯中體積為s;

然後分六種情況:

1,s倒m

2,s倒n

3,m倒n

4,m倒s

5,n倒m

6,n倒s

直到n,s杯中的可樂能等分(此時m杯中體積為0)為止,若不能等分則輸出no

感想:bfs的應用題,這個題想起來不是很難,但是**有點長,不是很好寫,中間出錯了好幾次。

**如下:

#include#include#include#include#include#include#include#includeusing namespace std;

#define maxn 101

bool visited[maxn][maxn];

int m,n,s,si,sj;

struct node

;void bfs()

else

if(p.all+p.y>n)

else

if(p.x+p.y>n)

else

q.all=p.all+p.x,q.x=0,q.y=p.y,q.t=p.t+1;

if(!visited[q.x][q.y])

que.push(q),visited[q.x][q.y]=1;

if(p.x+p.y>m)

else

q.all=p.all+p.y,q.x=p.x,q.y=0,q.t=p.t+1;

if(!visited[q.x][q.y])

que.push(q),visited[q.x][q.y]=1;

}cout<<"no"<>s>>m>>n&&s+m+n)

return 0;

}

課程練習二 1017非常可樂

problem description 大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m 毫...

1017 非常可樂

problem description 大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m 毫...

1017 非常可樂

題意 要求將一瓶可樂平均分成份,問能否平均分成兩份,如果能輸出最少需要幾次否則輸出no題目給出三個整數 s n m s表示可樂總量 n m分別為兩個杯子的容量 且 s n m 思路 先將m,n按大小排序 小的設為m 由 s 0 0 狀態 轉換到 0 s 2 s 2 的狀態且要找出最優解,用bfs 題...