本文为借鉴网上很多人的方法,总结下来,以督促自己算法博大精深.你要学习的还很多!
不会玩cnds beichui为原作者!
原文如下:
都说这个问题无聊,其实给的都不是最简解法。
这个问题的最简解法不是双层循环,而是单层循环。
分析这个问题,完全可以简化。
如果100元全买小鸡,能买300只小鸡,多出来200的单位,这200的单位实际上是需要公鸡和母鸡数来抵消的。
一只公鸡等于6只小鸡,一只母鸡等于9只小鸡,所以每多一个公鸡,200就被抵消5,多一个母鸡,200被抵消8。
所以这个问题简化后,应该是:几个8和几个5的和等于200?(仔鸡数等于100-8的个数-5的个数)
很显然,单层循环就OK了。
代码如下:
for(int i=1;i<=(200/8);i++){ //此处i为母鸡个数
if((200-i*8)%5==0){
int a=(200-i*8)/5;//此处a为公鸡个数
System.out.println("母鸡"+i+"公鸡"+a+"仔鸡"+(100-i-a));
}
}
理论上这里 9只小鸡换一只母鸡 应该是抵消的关系,但为何抵消8是因为要在100原来的小鸡里面 再拿出去一只小的 放过来一只母鸡!
算法博大精深