问题描述
有一台天平秤和两种砝码,质量分别是a克和b克,每种砝码的数量足够多。现在要称出重量为c克的物品,问最少需要多少个砝码?
输入格式
三个整数a,b,c (a != b, a <= 100,000, b <= 100,000, c <= 2,000,000)
输出格式
一行,一个整数,表示所需最小的砝码总数.
数据保证一定有解
样例输入 1
700 300 200
样例输出 1
4
样例输入 2
500 200 300
样例输出 2
2
样例输入 3
648 375 4002
样例输出 3
123
提示
注意:本题时限0.5s
分析:
拓展 欧几里得算法(gcd)
ACcode:
#include<bits/stdc++.h> using namespace std; inline long long gcd(int a,int b) { if(b==0)return a; return gcd(b,a%b); } inline long long exgcd(long long a,long long b,long long &x,long long &y) { long long res,temp; if(b==0) { x=1; y=0; return a; } res=exgcd(b,a%b,x,y); temp=x; x=y; y=temp-a/b*y; return res; } long long a,b,c,d,x,y,xx,yy,p,q,a1,a2; int main() { cin>>a>>b>>c; d=exgcd(a,b,x,y); x*=c/d,y*=c/d; xx=x,yy=y; p=b/d,q=a/d; a1=a2=abs(x)+abs(y); while(abs(x+p)+abs(y-q)<a1) { x+=p; y-=q; a1=abs(x)+abs(y); } while(abs(xx-p)+abs(yy+q)<a2) { xx-=p; yy+=q; a2=abs(xx)+abs(yy); } cout<<min(a1,a2); return 0; }