这篇文章讲述的是算法初级部分的出售金鱼问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。
问题描述
小明将样的金鱼分5次出售:第1次卖出全部的一半加1/2条;第二次卖出余下的三分之一加1/3条;第三次卖出余下的四分之一加1/4条;第四次卖出余下的五分之一加1/5条;最后卖出余下的11条。试编程求出原来鱼缸里共有多少条鱼?
算法分析
穷举法,由题意可知第n次卖出剩余/(n+1)+1/(n+1)条假设第n次卖出前与的总数为x条,设第n次卖出后鱼缸中剩余f(n)条,则
f(n) = x-(x+1)/(n+1)
且f(5) = 11 ; 求f(0)时x为多少?
取值范围:n:0~5 ;f(0)>11
代码实现
package mathematics;
public class Q5_GoldenFish {
/**
* 问题描述:小明将样的金鱼分5次出售:第1次卖出全部的一半加1/2条;第二次卖出余下的
* 三分之一加1/3条;第三次卖出余下的四分之一加1/4条;第四次卖出余下的五分
* 之一加1/5条;最后卖出余下的11条。试编程求出原来鱼缸里共有多少条鱼?
*
* 算法分析:穷举法,由题意可知第n次卖出剩余/(n+1)+1/(n+1)条假设第n次卖出前与的总
* 数为x条,设第n次卖出后鱼缸中剩余f(n)条,则
* f(n) = x-(x+1)/(n+1)
* 且f(5) = 11 ; 求f(0)时x为多少?
* 取值范围:n:0~5
* f(0)>11
*/
public static void main(String[] args) {
int x , n ;
boolean flag = true ;
for(x = 11 ; flag ; x+=2){
int fish = x ;
for(n=1 ; n<5 ; n++){
if((fish+1)%(n+1)==0) //金鱼只能整条卖
fish-=(fish+1)/(n+1) ;
else
break ;
}
if(n==5 && fish==11){
System.out.println("原来金鱼条数为:"+x);
flag = false ;
}
}
}
}
样例输出
原来金鱼条数为:59