请教百钱买百鸡问题

leisurelyCoder 2007-07-03 02:41:37
public class D{
public static void main(String[] args){
int rooster,hen,chick;
for(rooster=0;rooster<=20;rooster++){
for(hen=0;hen<=33;hen++){
for(chick=3;chick<=300;chick++){
if((rooster+hen+chick==100)&&((5*rooster+3*hen+chick/3)==100)){
System.out.print ("rooster's num:" + rooster+"\t");
System.out.print (" hen's num:" + hen+"\t");
System.out.println(" chick's num:" + chick+"\t");
}
}
}
}

}
}
我的计算结果是

rooster's num:0 hen's num:25 chick's num:75
rooster's num:3 hen's num:20 chick's num:77
rooster's num:4 hen's num:18 chick's num:78
rooster's num:7 hen's num:13 chick's num:80
rooster's num:8 hen's num:11 chick's num:81
rooster's num:11 hen's num:6 chick's num:83
rooster's num:12 hen's num:4 chick's num:84


想请问到底错在哪里了??
...全文
330 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
leisurelyCoder 2007-07-03
  • 打赏
  • 举报
回复
ok!

从1开始就ok了

谢谢
「已注销」 2007-07-03
  • 打赏
  • 举报
回复
循环从1开始,就过滤掉0了
leisurelyCoder 2007-07-03
  • 打赏
  • 举报
回复
那,可是怎么过滤掉那个0的答案呢?
「已注销」 2007-07-03
  • 打赏
  • 举报
回复
0,显然是不正确的答案,既然说买3样东西,那每样东西不能为0吧,至少要买1个
  • 打赏
  • 举报
回复
4 种是正确答案。

redduke1202 的循环应该从 0 开始,而不是从 1 开始。
leisurelyCoder 2007-07-03
  • 打赏
  • 举报
回复
这么多人回帖

感谢大家

不过我得出四种答案
rooster's num:0 hen's num:25 chick's num:75
rooster's num:4 hen's num:18 chick's num:78
rooster's num:8 hen's num:11 chick's num:81
rooster's num:12 hen's num:4 chick's num:84
gongyali2005 2007-07-03
  • 打赏
  • 举报
回复
public class Baiqian
{
public static void main(String [] args)
{
int x=0,z=0;
int y;
for(int i=0;i<20;i++){
x=i;
for(int j=3;j<100;j+=3){
z=j;
y=100-x-z;
if(5*x+3*y+z/3==100&&y>0&&x>0){
System.out.print(x+"\t"+y+"\t"+z+"\t");
System.out.println();
}
}
}
}
}
leisurelyCoder 2007-07-03
  • 打赏
  • 举报
回复
谢谢两位

我采用了三楼的方法!
「已注销」 2007-07-03
  • 打赏
  • 举报
回复
计算结果
rooster=4,hen=18,chick=78
rooster=8,hen=11,chick=81
rooster=12,hen=4,chick=84
「已注销」 2007-07-03
  • 打赏
  • 举报
回复
//修正下,附带加点注释
for (int rooster = 1; rooster <= 100 / 5; rooster++) {//
for (int hen = 1; hen <= (100 - rooster * 5) / 3; hen++) {//根据总价100
//尽量减少循环
int chick = (100 - 5 * rooster - 3 * hen) * 3;//根据总价计算
if (rooster + hen + chick != 100)//根据总数判断
continue;
System.out.println("rooster=" + rooster + ",hen=" + hen
+ ",chick=" + chick);
}
}
「已注销」 2007-07-03
  • 打赏
  • 举报
回复
//优化代码
for(rooster=0;rooster<=100/5;rooster++){
for(hen=0;hen<=(100-rooster*5)/3;hen++){
{
chick=100-rooster-hen;
if(chick%3!=0)
continue;
if(rooster*5+hen*3+chick/3==100)
System.out.println(....);//略
}
bindian 2007-07-03
  • 打赏
  • 举报
回复
错在chick/3 因为chick/3是取整的,可以这样改:if((chick%3==0)&&(rooster+hen+chick==100)&&((5*rooster+3*hen+chick/3)==100))
  • 打赏
  • 举报
回复
把 for(chick=3;chick<=300;chick++){ 这个循环去掉,改成:

chick = 100 - rooster - hen;

以便加快速度。
  • 打赏
  • 举报
回复
把:if((rooster+hen+chick==100)&&((5*rooster+3*hen+chick/3)==100)){

改为:if((rooster+hen+chick==100)&&((5*rooster+3*hen+chick/3.0)==100.0)){

int 除以 int 的意思是整数,并不会产生小数的,将 3 改成 3.0 就可以了。
内容概要:本文档为程序设计基础上机测试题集1,涵盖多个编程练习题目,包括但不限于:发奖金(优化纸币组合)、求闰年数(计算指定年份内的闰年总数)、猴子吃桃(使用倒推法解决递减问题)、小游戏(判断数字之和是否为特定数值的倍数)、考拉兹猜想(验证数学猜想并打印序列)、凯撒密码(实现简单的字符加密算法)、百钱买百鸡(解决古代数学问题)、素数判定(判断输入是否为素数)、计算平均成绩统计不及格人数(处理学生成绩数据)以及打印数字图案(根据输入生成特定格式的数字矩阵)。每个题目都提供了具体的输入输出示例和C/C++代码实现。 适合人群:计算机专业学生或具有一定编程基础的学习者,尤其是正在学习C/C++语言和基础算法的人群。 使用场景及目标:①作为课堂作业或课后练习,巩固所学知识;②用于编程入门考试或竞赛准备;③帮助初学者理解常见算法思想和编程技巧,提高解决问题的能力。 阅读建议:建议读者先尝试独立完成每个题目,之后再参考提供的代码实现,对比自己的思路与标准答案之间的差异,注意代码规范性和效率优化。对于不太理解的地方,可以通过查阅相关资料或向老师请教来加深理解。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧