小明想作卖油的商人。因为家里太穷,所以他买不起一般人所使用的量器,他只有一个装他所有的油的大桶子,还有两个确知容量的杯子(但上面没有刻度)。
每当客人要来买油的时候,客人会告诉他想要买多少油,小明虽然没有正常的量器,但聪明的他,利用这两个杯子容量的差异,经过若干次注满与倒空的过程,依然凑出客人所要的量。经过多日的买卖,小明渐渐发现,有些时候,有些要求的量是任凭他怎样努力都是凑不出来的。你能帮助他找出哪些量凑得出来,哪些量凑不出来吗?
输入说明:
输入档中有许多组输入,每组输入占一列。每一组输入里,会有三个以空白隔开的整数:第一个和第二个代表小明所拥有的两个杯子的容量,第三个代表客人所要求的量,单位都是公合(这三个整数都是正的,而且不会超过100)。遇到一行为三个零“0 0 0”为档案结束,不须处理这组输入。
输出说明:
对每一组测试资料,你应该输出一列。如果客人要求的量凑得出来,请输出「Yes」,否则请输出「No」。
第一组:小明可以用容量为1公合的杯子将油量给客人。
第二组:小明可以先用容量为2公合的杯子量油给客人4次,然后再用容量为1公合的杯子量给客人1次。
第三组:小明可以先把5公合的杯子注满,然后用这个5公合的杯子将3公合的杯子注满,那么在5公合的杯子里就会剩下2公合,将这2公合量给客人以后,把3公合的杯子倒空,再重覆一次,就可以量给客人总共4公合的油了。
范例输入:
1 2 1
1 2 9
3 5 4
3 6 8
0 0 0
范例输出:
Yes
Yes
Yes
No
我的程序是
program ball;
var n,m:longint;
a,b,c:array[1..200000]of longint;
begin
for n:=1 to 200000 do
begin
readln(a[n],b[n],c[n]);
if (a[n]=0) and (b[n]=0) and (c[n]=0) then break
else begin
m:=abs(a[n]-b[n]);
if m=0 then break
else begin
if c[n]=0 then break
else
if c[n] mod m=0 then writeln(’Yes’)
else writeln(’No’);
end;
end;
end;
end.
m:=abs(a[n]-b[n]);
if m=0 then break
else begin
if c[n]=0 then break
else
if c[n] mod m=0 then writeln(’Yes’)
else writeln(’No’);
其中c[n] mod m=0 就判定不对了,可能会出现c[n]有m和a[n],b[n]共同组成
这应该也行吧,就是说判定是否能用a[n],b[n],m组成c[n]