ACM OJ 《非常可樂》C

2021-10-18 23:33:40 字數 1307 閱讀 1521

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

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

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

7 4 3

4 1 3

0 0 0no3

//

// main.cpp

// 非常可樂

//// created by hiss on 2020/10/24.

//#include "iostream"

#include

#include

#include

using namespace std;

int s,n,m;

int vis[

105]

[105][

105];

struct node

;int check

(int x,int y,int z)

//平分條件

int bfs()

}else

//將n杯倒入s杯中不能將s杯倒滿}if

(a.n > m - a.m)

//將n杯倒入m杯中能將m杯倒滿

}else

//將n杯倒入m杯中不能將m杯倒滿}}

if(a.m)

//同上

}else}if

(a.m>n-a.n)

}else}}

if(a.s)

//同上

}else}if

(a.s>m-a.m)

}else}}

}return0;

} int main()

memset

(vis,0,

sizeof

(vis));

ans =

bfs();

if(ans)

cout << ans << endl;

else

cout <<

"no"

<< endl;

}return0;

}

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 題...

1017 非常可樂

1017 非常可樂 題意 有體積為s的一瓶可樂,和體積為m,n的兩個杯子,他們都沒有刻度,求將可樂平分最少倒多少次。思路 三個杯子倒可樂,共有六種情況,s n,s m,m s,m n,n s,n m,判斷每種可能的情況,新增到佇列中,逐一搜尋。感想 直接對所有可能的情況搜尋,思路並不複雜。inclu...