H - Proper Nutrition简单的解方程题

H - Proper Nutrition简单的解方程题

耿直的题目描述
给3个数字n,a,b
求存不存在非负的整数X,Y满足X·a + Y·b = n。
简单的输入描述
第一行一个整数代表n(1 ≤ n ≤ 10 000 000)
第二行一个整数代表a(1 ≤ a ≤ 10 000 000)
第三行一个整数代表b(1 ≤ b ≤ 10 000 000)
直接的输出描述
如果不存在,直接输出NO
如果存在,直接输出YES
并且第二行输出X Y的值
如果有多组X Y满足条件,输出任意一组

不耿直的样例
Input
7
2
3
Output
YES
2 1

附上题目链接: [link](http://codeforces.com/problemset/problem/898/B).
一开始我使用x到无穷的循环去找符合条件的y,并没有设置x的循环终止条件,这样做很容易超时或者陷入死循环。
原题提到a,b都大于0那么方程中移项后x=(n-yb)/a,当y取0时有x的最大值n/a,故可以将x<=n/a设置为循环终止条件。


#include<cstdio>
int main(void)
{
	long long n,a,b;
	while(scanf("%lld%lld%lld",&n,&a,&b)!=EOF)
	{
		long long x;
		int judge=0;
		for (x=0;x<=(n/a);x++)//当y为0时x获得最大值,故循环上界条件为这个 
		{
			if ((n-x*a)%b==0)//能整除则为整数同时满足方程 
			{
				printf("YES\n%lld %lld",x,(n-x*a)/b);
				judge=1;
				break;
			}
		}
		if (judge==0)
		printf("NO\n");
	}
	return 0;
}


猜你喜欢

转载自blog.csdn.net/qq_42521237/article/details/85223671
h'h