您的位置:首页 > 其它

1743: 解方程

2015-10-26 23:53 162 查看

              1743:解方程

Description

一群奥特曼打败了一群小怪兽,已知所有的奥特曼均有x1个头、y1条腿(变异奥特曼),所有的小怪兽均有x2个头、y2条腿。战场上一共有q个头,w条腿,问有多少奥特曼,有多少个小怪兽?

Input

输入数据有多组每组包含6个正整数,分别为,x1,y1,x2,y2,q,w;(0<=q,w<=1000000000);输入数据保证有唯一解。读到000000结束。

Output

输出占一行,包含两个正整数,分别为:奥特曼和小怪兽的数目;

SampleInput

749405263991816625693657000000

SampleOutput

986297

#include<stdio.h>

intmain(void)
{
longlongintx1,y1,x2,y2,q,w;
while(scanf("%lld%lld%lld%lld%lld%lld",&x1,&y1,&x2,&y2,&q,&w)!=EOF)
{
longlonginti,k;//i是奥特曼数量,k是怪兽数量
if(x1==0&&y1==0&&x2==0&&y2==0&&q==0&&w==0)
{
break;
}
else
{

k=(q*y1-w*x1)/(x2*y1-x1*y2);
i=(q*y2-w*x2)/(x1*y2-y1*x2);
printf("%lld%lld\n",i,k);
}

}
return0;
}


再来看看这个代码:(枚举?暴力?)

#include<stdio.h>

intmain(void)
{
intx1,y1,x2,y2,q,w;
while(scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&q,&w)!=EOF)
{
inti,k;//i是奥特曼数量,k是怪兽数量
if(x1==0&&y1==0&&x2==0&&y2==0&&q==0&&w==0)
{
return1;
}
else
{
inttemp1=q/x1,temp2=q/x2;
for(i=0;i<=temp1;i++)
{
for(k=0;k<=temp2;k++)
{
if(i*y1+k*y2==w&&i*x1+k*x2==q)
{
printf("%d%d\n",i,k);
break;
}
}
}
}
}
return0;
}


对于奥特曼/怪兽的数量从零开始,虽然也能够求出数据,起码能够求出测试数据,但是随着数据的增大,for执行的次数也会增大,所以采用直接求解的方法,相当于求二元一次方程组,头数,脚数会是确定值,输入的数据会都是正整数除非全为0退出,所以



k=(q*y1-w*x1)/(x2*y1-x1*y2);
i=(q*y2-w*x2)/(x1*y2-y1*x2);


直接利用表达式求出对应的数量。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: