百钱买百鸡问题.docx

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:19108035856(电话支持时间:9:00-19:00)。
百钱买百鸡问题 Time Limit: 1 Sec Memory Limit: 2 MB Submit: 1120 Solved: 161 [Submit][Status][Web Board] Description “ “百钱买百鸡”是我国著名的古代数学问题,中国古代数学家张丘建在他的《算经》中提出了 这样一个问题:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何? 你的任务是求解下面这个问题。问题是这样描述的:a 文钱可买一只公鸡,b 文钱可买一只 母鸡,c 文钱可买d 只小鸡。用m 文钱买n 只鸡,那么有公鸡x 只、母鸡y 只、小鸡 z 只。求解出符合题意的x,y,z。 Input 输入为一张表。第一行是一个固定不变的表头,格式见 输入为一张表。第一行是一个固定不变的表头,格式见sample。后面有多行,每行为一组测试数据。每组测试数据由 6 个整数组成,分别为“a,b,c/d,m,n”。满足 0<a,b,c,d<=50, 50<=m,n<=108+1,并且母鸡和小鸡的单价不会相同。 Output 每组测试数据的运行结果输出为一张表,表头固定为 每组测试数据的运行结果输出为一张表,表头固定为“COCKS,HENS,CHICKS”。每组测试数 据的一个可行解数出为一行,为三个整数:“x,y,z”。多组解按照公鸡数从少到多的顺序输出。若测试数据无解则输出“Cannot buy!”。两组测试数据之间用一个空行分隔开。 Sample Input COCK,HEN,CHICK,MONEY,CHICKS 3,2,1/3,100,100 COCK,HEN,CHICK,MONEY,CHICKS 3,2,1/3,100,100 5,3,1/3,100,100 8,5,1/7,100,100 8,5,1/7,300,300 Sample Output COCKS,HENS,CHICKS 0,40,60 COCKS,HENS,CHICKS 0,40,60 5,32,63 5,32,63 10,24,66 15,16,69 20,8,72 25,0,75 COCKS,HENS,CHICKS 0,25,75 4,18,78 8,11,81 12,4,84 Cannot buy! COCKS,HENS,CHICKS 8,40,252 HINT 本题重点在于了解多重循环的运行效率问题,减少一层循环可以降低很大规模的运算量。通 本题重点在于了解多重循环的运行效率问题,减少一层循环可以降低很大规模的运算量。通过在循环体内加计数器可以统计出循环的运行次数,当测试数据变大时,运行次数的增长会非常可观,这就是超时的原因了。 Append Code #include <stdio.h> #include <math.h> int main() { char s[50]; long int a,b,m,n,x,y,z,flag; int c,d; gets(s); while(scanf("%ld,%ld,%d/%d,%ld,%ld",&a,&b,&c,&d,&m,&n)!=EOF) { flag=0; for(x=0; x<=n; x++) { if((((a-b)*x+b*n-m)*d)%(b*d-c)==0) { z=(((a-b)*x+b*n-m)*d)/(double)(b*d-c); y=n-z-x; if(fabs(a*x+b*y+z*c/(double)d-m)<0.000000001&&z*c%d== 0&&x>=0&&y>=0&&z>=0) { flag=1; } } } if(flag==0) printf("Cannot buy!\n"); else {printf("COCKS,HENS,CHICKS\n"); for(x=0; x<=n; x++) { if((((a-b)*x+b*n-m)*d)%(b*d-c)==0) { z=(((a-b)*x+b*n-m)*d)/(double)(b*d-c); y=n-z-x; if(fabs(a*x+b*y+z*c/(double)d-m)<0.000000001&&z*c%d== 0&&x>=0&&y>=0&&z>=0) { printf("%ld,%ld,%ld\n",x,y,z); } } } } printf("\n"); } return 0; }

您可能关注的文档

文档评论(0)

hao187 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地湖北
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

相关文档

相关课程推荐