用到贝祖定理,简单来说:
ax+by = z当x+y>=z,且z是x和y的最大公约数的倍数时有解。
#include<stdio.h>
#include<math.h>
int gcd(int x,int y)//求最大公约数
{
int t = 0;
while(t = y%x)
{
y = x;
x = t;
}
return x;
}
bool measure(int x,int y,int z)
{
if(z==0||x+y == z)
return true;
else
{
if(x+y<z)
return false;
else
{
int m = 0;//x,y的最大公约数
m = gcd(x,y);
if(z%m == 0)//z是m的倍数
return true;
else
return false;
}
}
}
int main()
{
int jug1 = 0;
int jug2 = 0;
int target = 0;
scanf(" jug1Capacity = %d, jug2Capacity = %d, targetCapacity = %d",&jug1,&jug2,&target);
if(measure(jug1,jug2,target))
{
printf("true\n");
}
else
printf("false\n");
return 0;
}