每天一道编程题(八)--------百钱买百鸡

          同学面试的时候问了一道百钱买百鸡问题,后来有面试淘宝的又问到了一个小马过河的问题,非常的类似,先来描述一下两个问题的题意。(1)有100块钱要买100只鸡,其中公鸡5块钱一只,母鸡3块钱一只,小鸡一块钱3只,问怎样买才可以?(2)小马过河问题,有100只马要背100担粮食,其中大马一批背三担,中马一批背两担,小马两匹背一担,问怎么背?

         起初拿到这种题目,想这出题人有问题吧,一个三重for循环就可以将答案解出,这么简单还出,于是写了一下的代码

public class TestChicken {
	public static void test(){
		for(float i=0;i<100;i++){
			for(float j=0;j<100;j++){
				for(float k=0;k<100;k++){
					if((5*i+3*j+k/3==100)&&(i+j+k==100)){
						System.out.println("购买公鸡的数量:"+i+"购买母鸡的数量:"+j+"购买小鸡的数量:"+k);
					}
				}
			}
		}
	}
  public static void main(String[] args){
	 
	  test();
  }
}
         后来仔细分析一下,觉得出题人是想考你优化的问题,以最快的速度算出才是王道,列了两个方程组x+y+z=100;5x+3y+z/3=100,又加上x>0,y>0,z>0,就是尽量减少for循环,又对上述两个方程分别消去x,y,z,配合大于0且为整数的条件,接这个不定方程组获得,x必须是4的倍数,y和z必须是3的倍数,于是挑了个最大的,设x为4k,解得y=25-7k,z=75+3k,,则k的取值就限制在,0,1,2,3就可以了这样仅仅做一次for循环而且循环次数为4次就可以解出题目。于是就写了以下这段程序:
public static void test2(){

		for(float i=0;i<4;i++){
			if((25-7*i)>0){
				System.out.println("购买公鸡的数量:"+4*i+"购买母鸡的数量:"+(25-7*i)+"购买小鸡的数量:"+(75+3*i));
			}
		}
	}
      小马过河问题也是同样的方法解决。后来又想了个方法,明天传上来。。。。。。。。。。

         

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值