倒水问题

有两个容器,容积分别为A升和B升,有无限多的水,现在需要C升水。 我们还有一个足够大的水缸,足够容纳C升水。起初它是空的,我们只能往水缸里倒入水,而不能倒出。 可以进行的操作是: 把一个容器灌满; 把一个容器清空(容器里剩余的水全部倒掉,或者倒入水缸); 用一个容器的水倒入另外一个容器,直到倒出水的容器空或者倒入水的容器满。     问是否能够通过有限次操作,使得水缸最后恰好有C升水。 输入:三个整数A, B, C,其中 0 < A , B, C <= 1000000000 ;输出:true表示可以,false表示不可以 。

答案:

//求a、b的最大公约数,若可以被c整除,则输出true,否则输出false


//递归求最大公约数
int gcd(int a, int b)
{
	if (b == 0)
		return a;
	return gcd(b, a%b);
}

//非递归求最大公约数
int gcd(int a, int b)
{
	int temp;
	while(b!=0)/*利用辗除法,直到b为0为止*/
	{
		temp=a%b;
		a=b;
		b=temp;
	}
	return a;
}
bool can(int a, int b, int c)
{
	int temp = gcd(a,b);
	if (c%temp == 0)
	{
		return true;
	}
	return false;
}


附加 求n个数的最大公约数,这里把n个数放在数组中

int gcdN(int arr[], int num)
{
	if (1 == num)
		return arr[0];
	return gcd(arr[num - 1], gcdN(arr, num-1));
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值