博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SDUST 软件工程2016-作业4-A 百钱买鸡问题
阅读量:5227 次
发布时间:2019-06-14

本文共 1190 字,大约阅读时间需要 3 分钟。

解决百钱买鸡问题原本并不困难,关键的是这道题对其进行了升级,测试数据太大,传统的解法,像三重循环,二重循环都会导致超时。

这道题正确的解法应该是结合数学方程进行化简,将其转化为1层循环:

x+y+z=n

ax+by+c/d*z=m

由上述两个方程联立可用其他量表示出y来。从而只需要枚举x就能解决该题。

在求方程之后注意要化简,只有能整除的时候才进行整除。最后与m比较的时候因为c/d的问题,所以等式两边同时乘以d以消除误差

最后千万不要加上z%d==0的条件,因为例如当3元买12小鸡的时候,实际情况是最少买四只小鸡是合法情况不会出现小数,但z%12会变成最少买12只小鸡才是合法情况,所以应该去掉这个条件。

 

1 #include 
2 int main(){ 3 char s[100]; 4 long long a,b, c, d, m, n; 5 gets(s); 6 int first=0; 7 int ok; 8 int k=0; 9 while(scanf("%lld,%lld,%lld/%lld,%lld,%lld",&a,&b,&c,&d,&m,&n)!=EOF){10 k++;11 if(first==0)first=1;else printf("\n");12 ok=0;13 for(long long i=0;i<=m/a;i++){14 long long j;15 if((m*d-c*n-(a*d-c)*i)%(b*d-c)==0)16 j=(m*d-c*n-(a*d-c)*i)/(b*d-c);17 if(j<0)continue;18 long long z=n-i-j;19 if((z*c+i*a*d+j*b*d)==m*d&&z>=0){20 if(!ok)printf("COCKS,HENS,CHICKS\n");21 ok=1;22 printf("%lld,%lld,%lld\n",i,j,z);23 }24 }25 if(!ok)printf("Cannot buy!\n");26 27 }28 return 0;29 }

 

转载于:https://www.cnblogs.com/Wade-/p/6032394.html

你可能感兴趣的文章
python的多行注释
查看>>
连接Oracle需要jar包和javadoc文档的下载
查看>>
UVA 10976 - Fractions Again?!
查看>>
Dreamweaver cc新版本css单行显示
查看>>
【android】安卓的权限提示及版本相关
查看>>
3D重建的进阶了解---深度图,网格,体素,点云是什么
查看>>
JavaScript可否多线程? 深入理解JavaScript定时机制
查看>>
IOS基础学习
查看>>
js 模拟滚动条
查看>>
PHP 导出 Excell
查看>>
关于springmvc json交互产生的406错误
查看>>
python之-框架
查看>>
Gradle多项目构建
查看>>
Java基础教程——网络基础知识
查看>>
c++文件的读写
查看>>
[Web] 如何实现Web服务器和应用服务器的负载均衡?
查看>>
创建文件夹命令
查看>>
自己到底要的是什么
查看>>
this 指向
查看>>
Kruskal基础最小生成树
查看>>