大家一定覺的運動以後喝可樂是一件很愜意的事情,但是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 outputno3
廣度優先搜尋,六種情況,判斷好往**倒,倒的時候又有哪些情況就可以,最後如果兩個相等,另乙個是零,才是平分,這裡判斷改了好多次。。。。。
因為瓶子都是沒有刻度的,所以每次倒只能倒完(woc,這裡好坑啊,一開始想複雜了好多。。。)
#include
#include
#include
#include
using
namespace std;
int n,m,s;
//代表了三個瓶子的容量
int vis[
120]
[120][
120]
;//標記三個瓶子的狀態是否出現過
struct noderounds,nextrounds;
void
bfs(
) q.
pop();
for(i =
0; i <
6; i++
)else
if(vis[nextrounds.s]
[nextrounds.n]
[nextrounds.m]==0
)}else
if(i==1)
else
if(vis[nextrounds.s]
[nextrounds.n]
[nextrounds.m]==0
)}else
if(i==2)
else
if(vis[nextrounds.s]
[nextrounds.n]
[nextrounds.m]==0
)}else
if(i==3)
else
if(vis[nextrounds.s]
[nextrounds.n]
[nextrounds.m]==0
)}else
if(i==4)
else
if(vis[nextrounds.s]
[nextrounds.n]
[nextrounds.m]==0
)}else
else
if(vis[nextrounds.s]
[nextrounds.n]
[nextrounds.m]==0
)}}}
printf
("no\n");
//如果隊列為空了說明方法都用完了,不可能平分
return;}
intmain()
else
}return0;
}
**:大佬 非常可樂 bfs
大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m 毫公升 可樂的體積為s s 101 毫公升...
非常可樂 BFS
大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m 毫公升 可樂的體積為s s 101 毫公升...
非常可樂(bfs
problem 非常可樂 description 大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公...