`

interview-----百元与百鸡

J# 
阅读更多

公鸡每只5元钱,母鸡每只3元钱,小鸡3只1元钱,用一百元钱买100只鸡,问公鸡。母鸡,小鸡各有多少只?有多少种可能?

这是初中题目: 设公鸡有 i 只 ,母鸡有  j 只 , 那么小鸡有 100 -i - j 只,设为 k

条件一: i + j + k =100
条件二:  5*i + 3*j + k/3 = 100
隐含条件: i < = 20 , j <= 33 

所以循环呗,循环之后满足这些条件的就是答案

for(int i=0;i<=20;i++){
   for(int j=0;j<=33;j++){
        k = 100 -i - j; //第一个条件自动满足
        if(5*i+3*j+k/3 == 100 && k%3 == 0){
            System.out.println(" 公鸡数 ="+i+"  母鸡数 = "+j+"  小鸡数 = "+k);
        } 
   }
}


网上有人称用一重循环做出来了。。。其实这也是两重循环,他用if语句把j给初始化了
for (int i = 0,j = 0,k;true;)
   {
    k = 100 - i - j;
    if ((i*5 + j*3 + k/3) == 100 && k%3 == 0)
    {
      System.out.println(" 公鸡数 ="+i+"  母鸡数 = "+j+"  小鸡数 = "+k);
    }
    if (++j > 33 ) // j++然后判断下
    {
     j = 0;
     i++;
    }
    if (i > 20) 
    {
     break;
    }
   }
下面这个蛋糕题目,还简单些

现有蛋糕5元/块(热量3/块),面包3元/块(热量2/块),牛奶1元/块(热量1/块),在花掉100元的情况下输出按热量大小的所有排列组合

设蛋糕 i 个 , 面包 j 个 ,牛奶 k 个
隐含条件: i<=20  j<=33 , k<=100 ,因为j和j不能左右k的值,那么他将是三重循环
条件: 5*i + 3*j +k = 100
for(int i=0;i<=20;i++){
   for(int j=0;j<=33;j++){
      for(int k=0;k<= 100){
        if(5*i + 3*j +k == 100)
       System.out.println("蛋糕热量为 "+3*i+"  面包热量为"+2*j+" 牛奶热量为 "+k);
      }
   }
}



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics