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
749405263991816625693657000000SampleOutput
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);
直接利用表达式求出对应的数量。
相关文章推荐
- 信息安全系统设计基础第七周学习总结——20135308
- ios 使用第三方框架注意
- java变长参数
- activity的跳转动画效果
- Android Fragment 真正的完全解析(下)
- 算法题一
- 移动浏览器前景畅想
- 学习之路
- iptables详解
- 团队博客作业Week5 --- 团队贡献分--分配规则
- 利用Cydia Substrate进行Android HOOK(二)
- 前端开发的小坑
- 51nod 1117 聪明的木匠 (优先队列_STL)
- Android Fragment 真正的完全解析(上)
- 开心的金明
- Spring输入乱码解决方案
- Android应用宣传页和自定义页卡指示器
- Notes on Understanding The Linux Kernel
- 基础功能测试架构
- Linux下安装MySQL