| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
为什么啊,一直wa ,心都碎了!那位指点一下!源代码如下:#include<iostream>
using namespace std;
int a,b,c;
int x,y,x0,y0;
int min_num,min_w;
int extern_gcd(int a,int b)
{
int t,d;
if(b==0){x0=1,y0=0;return a;}
d=extern_gcd(b,a%b);
t=x0;
x0=y0;
y0=t-(a/b)*y0;
return d;
}
int getx(int t)
{
return abs(c*x0+b*t);
}
int gety(int t)
{
return abs(c*y0-a*t);
}
int cal_xy(int z1,int z2)
{
return z1+z2;
}
int cal_w(int z1,int z2)
{
return z1*a+z2*b;
}
void cmp(int t)
{
int x1,y1,t1,t2;
x1=getx(t);
y1=gety(t);
t1=cal_xy(x1,y1);
if(t1<min_num)
{
x=x1;
y=y1;
min_num=t1;
}
else if(t1==min_num)
{
t2=cal_w(x1,y1);
if(t2<t1){x=x1;y=y1;min_w=t2;}
}
}
int main()
{
int i,d,flag=0;
while(EOF!=scanf("%d%d%d",&a,&b,&c))
{
flag=0;
if(!a&&!b&&!c)break;
if(a<b){d=a;a=b;b=d;flag=1;}
d=extern_gcd(a,b);
// if(c%d){printf("no solution\n");continue;}
c=c/d;
a=a/d;
b=b/d;
x=getx(0);
y=gety(0);
min_num=cal_xy(x,y); // 计算 |x|+|y|;
min_w=cal_w(x,y); // 计算 a*|x|+b*|y|
cmp(c*y0/a);
cmp(c*y0/a-1);
cmp(c*y0/a+1);
if(!flag)printf("%d %d\n",x,y);
else printf("%d %d\n",y,x);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator