A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

ponyworld

黑马帝

  • 黑马币:0

  • 帖子:7

  • 精华:0

© ponyworld 黑马帝   /  2012-2-1 15:34  /  2688 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有一个人每个月的工资为300元;邻居家有一条狗,
他想用赚到的钱把邻居家所有的狗都买过来,一条狗1000元,
但3个月一只狗就能生出1只小狗。问这个人能否实现愿望?

评分

参与人数 1技术分 +1 收起 理由
admin + 1 有点意思,编程实现

查看全部评分

13 个回复

倒序浏览
这个和Java有关系么?不要灌水啊!
回复 使用道具 举报
是每3个月一只狗能生一只狗,还是说狗3个月长大后生一只,然后以后每一个月生一只?
回复 使用道具 举报
买不到:3个月,人才增加900元,狗增加>1只
回复 使用道具 举报
所有狗?
买不到的:理由同上。
公狗除外{:soso_e122:}
回复 使用道具 举报
张伟~ 发表于 2012-2-1 16:10
是每3个月一只狗能生一只狗,还是说狗3个月长大后生一只,然后以后每一个月生一只? ...

每只狗每3个月会生一只狗
回复 使用道具 举报
飞飞不落up 发表于 2012-2-1 15:52
这个和Java有关系么?不要灌水啊!

算法问题,怎么没关系呢?编程题啊
回复 使用道具 举报
攒四个月钱把邻居家的大狗也就是生仔的母狗买下来,以后母狗生的小狗都是你自己的啦。这样的邻居家还有一只小狗,你再攒三个月就可以把那只小狗也买了,这样你就把邻居家所有的狗都买到了。

点评

分析得好。不过如此一来,变脑筋急转变了。  发表于 2012-2-2 00:53

评分

参与人数 1技术分 +1 收起 理由
admin + 1 淡定

查看全部评分

回复 使用道具 举报
你提的问题不全面~你这个和老师的出的基础测试题,兔子的问题有些类似~但你没有任何的限制条件~那这样的可能性就比较多啦~程序也就比较多啦~
回复 使用道具 举报
黄秋 黑马帝 2012-2-2 01:57:11
10#
如果每3个月一只狗就能生出1只小狗,不考虑公母,大小,不可以把所有的狗都买过来。设刚开始是1月,第4月有1200元,能买一只狗,但这时足够3个月,已生出1小狗,这样第4月时:邻居仍有一狗,而那人剩下200元。依此类推,第7月时:邻居仍有一狗,而那人剩下100元;第10月时:邻居仍有一狗,而那人剩下0元。

据此,可用程序模拟:
  1. public class Test{
  2.         public static void main(String[] args)
  3.         {
  4.                 int money=0,salary=300,n=1,x=1000;
  5.                 for(int i=1;i<=x;i++){
  6.                         money+=salary;
  7.                         if(i>1 && (i-1)%3==0)        n++;
  8.                         if(money>=1000){
  9.                                 n--;
  10.                                 money-=1000;
  11.                         }
  12.                         if(n==0){
  13.                                 System.out.println(i+" 月可以把所有的狗都买过来");
  14.                                 return;
  15.                         }
  16.                         if(money<=0){
  17.                                 System.out.println(i+" 月了,还不可以把所有的狗都买过来");
  18.                                 return;
  19.                         }                       
  20.                 }
  21.                 System.out.println(x+" 月还不能把所有的狗都买过来");
  22.         }
  23. }
复制代码
那人3个月才有900元,邻居3个月产出一小狗:1000元,可看作邻居的产值高,他追不上。

评分

参与人数 1技术分 +2 收起 理由
admin + 2 先给分再看

查看全部评分

回复 使用道具 举报
本帖最后由 戴振良 于 2012-2-2 08:24 编辑

这问题就不用去想编程先,首先你得按实际去思考一下,每3个月就生一只狗,我假设第一只狗称之为母狗,我假设它不会停产的,而且我不会卖,只用来生小狗,我再假设它生出来的都是公狗,我再假设要买公狗就只要900块钱。
有了这些假设之后,我们来说3个月后:你赚了900块,而母狗生了一只公狗,你正好够钱把这只公狗给买了,再过3个月你又有900块,而母狗又生了一只公狗……就这样,你只有钱买公狗,什么时候能赚够钱把那只母狗给买了呢?这是不可能的!除非母狗死了生不了小狗的时候你可以用900块买个死母狗,不过你还是买不到母狗,因为我上面假设了母狗我不卖,无价之宝!!这下明白了吧,这就是编程思想吧应该!!

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
飞飞不落up 发表于 2012-2-1 17:12
攒四个月钱把邻居家的大狗也就是生仔的母狗买下来,以后母狗生的小狗都是你自己的啦。这样的邻居家还有一只 ...

是这样思想,但是代码实现一下,三个月后又生一只狗了

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
  1. /**
  2. * 需求 :有一个人每个月的工资为300元;邻居家有一条狗,他想用赚到的钱把邻居家所有的狗都买过来,一条狗1000元,但3个月一只狗就能生出1只小狗
  3. * 思路:1.编程思想:这个人每月只有300工资、需要4个月才有足够的钱买一只狗、而狗每三个月就产一只,
  4. *         得之,这个人在怎么努力、狗的产量始终比他工资要高、所以他永远也买不完。
  5. *                 2.生活思想:这个人可以在第四个月直接把母狗买了、母狗生下的可能是母狗或者公狗、反正只买母狗、当没了母狗那公狗也就没 生育的可能了、那也可能买完所有的狗。
  6. * 步骤:1.分别定义这个人工资、当前资金、狗的数目。
  7. *                 2.算人的寿命成0岁开始、一年12个月、12*100岁、所以他有1200月去买那些狗,也就是循环1200次
  8. *                 3.每循环一次、算作一个月、这个人工资加一次。当每循环3次、狗的只数加一只.判断:当当前资金大于或等于1000的时候、当前资金减1000,狗的个数减一
  9. *                 4.当狗的个数为0时代表买完了。否则没买完 5.运算结果、此人至少在有生之年是没法买完所有的狗
  10. */
  11. public class Test {

  12.         public static void main(String[] args)
  13.         {
  14.                 int money = 0; // 资金
  15.                 int wage = 300; // 工资
  16.                 int dogNum = 1; // 狗只数
  17.                 for (int i = 0; i <= 1200; i++)
  18.                 {
  19.                         // 每个月工资加一次
  20.                         money += wage;      
  21.                         if (i > 0 && i % 3 != 0)
  22.                         {
  23.                                 // 每循环三次 狗的个数加一
  24.                                 dogNum++;                  
  25.                         }
  26.                         if (money >= 1000)
  27.                         {
  28.                                 dogNum--;
  29.                                 money -= 1000;
  30.                         }
  31.                         if (dogNum == 0)
  32.                         {
  33.                                 System.out.println("在第" + i + "月全买了");
  34.                                 break;
  35.                         }
  36.                         else
  37.                         {
  38.                                 System.out.println(i + " 月了,资金=" + money + "-->狗个数=" + dogNum);
  39.                         }
  40.                 }
  41.         }
  42. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
荣凯旋 + 2 赞一个!

查看全部评分

回复 使用道具 举报
成果 黑马帝 2012-2-5 22:44:14
14#
如果每3个月一只狗就能生出1只小狗,不考虑公母,不可能把所有的狗都买过来。前4个月有1200元,能买一只狗A,但这时已生出1小狗b1,你花1000元买来一只,但邻居家还有一只,此时你还有200元。此时你要再过三个月才有200+900=1100元。而邻居家的小狗b1过二个月就产下了小狗c1,并且小狗c1已有一个月大。此时你买下小狗b1后只有100元。依此你我3*300=900元。买不完邻居家的狗狗。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马