Contest1100 - 软四课堂小测试4-1203-问题 A: 百鸡问题
2018-01-02 19:13
393 查看
题目描述
用小于等于n元去买100只鸡,大鸡5元/只,小鸡3元/只,还有1/3元每只的一种小鸡,分别记为x只,y只,z只。编程求解x,y,z所有可能解。
输入
测试数据有多组,输入n。
输出
对于每组输入,请输出x,y,z所有可行解,按照x,y,z依次增大的顺序输出。
样例输入
40
样例输出
x=0,y=0,z=100 x=0,y=1,z=99 x=0,y=2,z=98 x=1,y=0,z=99
提示
不会出现给出的钱买不到100只鸡的情况!思路点拨:
不能使用穷举法,那样会造成时间超限,我第一次就是用三层for循环,结果造成了时间超限。
下面是我用穷举法的代码。
#include<stdio.h>
int main()
{
int n,x,y,z;
while(~scanf("%d",&n))
{
for(x=0;x<=n/5;x++)
{
for(y=0;y<=(n-5*x)/3;y++)
{
for(z=0;z<=(n-5*x-3*y)*3;z++)
{
if(z+x+y==100)
{
printf("x=%d,y=%d,z=%d\n",x,y,z);
}
}
}
}
}
}
下面是正确的代码,我发现只需要使用两层for循环就行了,最后那个小鸡的只数可以直接根据前面两种鸡的只数算出来(总共100只嘛),但要注意最后那个小鸡的只数不能是负数,所以需要控制一下。
#include<stdio.h>
int main()
{
double n,x,y,z;
while(~scanf("%lf",&n))
{
for(x=0;x<=n/5;x++)
{
for(y=0;y<=(n-5*x)/3;y++)
{
z=100-x-y;
if(z>=0&&z/3+y*3+x*5<=n)//注意最后这种小鸡的只数不能是负数,所以需要控制一下
{
printf("x=%.0lf,y=%.0lf,z=%.0lf\n",x,y,z);
}
}
}
}
}
相关文章推荐
- Contest1100 - 软四课堂小测试4--问题 C: 回文数(函数专题)--2017-12-29
- 用junitperf做并发测试带来的问题
- Hadoop测试常见问题和测试方法
- [60] 测试技术常见的十一种问题之八:软件文档测试主要包含什么?
- 测试管理常见问题及其解决方法
- 测试中的一些常见问题的分析
- qt简单的hello world测试程序终端无输出问题
- 测试过程中的问题定位与分析
- 问题驱动的软件测试设计全景图
- amoeba搭建+测试+问题
- 莱芜市测试问题
- Win7下游戏全屏问题的通用解决方法(已测试)
- python接口测试中遇到问题
- dedecms本地测试好上传到空间的问题
- 关于适配性测试的问题--------【感谢搜狗团队整理】
- 软件测试缺陷定义之需求问题或需求不一致
- Win7兼容性测试及常见问题解答(一)
- 【转】测试项目中应该避免的问题,也是新人容易犯的错误。
- 解决Xcode 9.2系统真机测试时出现 could not find developer disk image问题
- 关于IAP:测试时能获取产品价格,却不能获取产品名称的问题