思路分析:循环次数未知,循环终止条件已知,使用while循环
public class demo4{public static void main(){int sum=0;//总钱数int day=0;//总天数int i=1;//每天挣的钱数while(true){sum+=i;day+=1;if(sum>=108){break;}i+=2;//后一天比前一天多挣2元}System.out.println(day);}
}
思路分析:不知道香蕉的数量,设为n个,用while循环,满足下面的条件结束:
1.n%5=1 a=(n-1)/5*4
2.a%5=2 b=(a-2)/5*4
3.b%5=3 c=(b-3)/5*4
4.c%5=4 d=(c-4)/5*4
5.d%5=0 d>0
总结:计算第n只猴子拿走香蕉后剩余的香蕉数,(x-n)/5计算的是一堆的香蕉数,*4计算机的是该猴子吃掉余下的n个并拿走自己的那一份后剩余的总的香蕉数(即拿走1份剩余的4份)
public class demo5{public static void main(String[] args){//法1:暴力解法int n=1;//代表香蕉获得数量while(true){if(n%5==1){int a=(n-1)/5*4;if(a%5==2){int b=(a-2)/%*4;if(b%5==3){int c=(b-3)/5*4;if(c%5==4){int d=(c-4)/5*4;if(d%5==0 && d>0){break;}}}}}n++;}System.out.println(n);//----------------------------------------------------------------------------------------//法2:数学逆推法//核心思路:设最后一次分香蕉时有5k个香蕉//逆推公式;剩余量=(当前量/4)*5+余数//当逆推到第一次分香蕉时,若满足余1的条件则得出答案int k=1;//最后一次分香蕉时的总数while(true){int total=5*k;//最后一次分香蕉时的总数//逆推前4次分香蕉的过程for(int i=4;i>=1;i--){if(total%4!=0){break;//必须被4整除才能逆推}total=total/4*5+i;if(i==1 && total%5==1){System.out.println(total);return;}}k++;}}
}