public class Test7 {
	public static void main(String[] args) {
/*猴子分香蕉
猴子分桃的问题,网上一搜一大把,这里我贴出我搜到的结果: 
话说花果山水帘洞有5只聪明的猴子,有一天它们得到了一堆桃子,
他们发现那堆桃子不能被均匀分5份,于是猴子们决定先去睡觉,
明天再讨论如何分配。夜深人静的时候,猴子A偷偷起来,吃掉了一个桃子后,
它发现余下的桃子正好可以平均分成5份,于是它拿走了一份;接着猴子B也起来先偷吃了一个,
结果它也发现余下的桃子恰好可以被平均分成5份,于是它也拿走了一份;后面的猴子C、D、E一次如法炮制,
先偷吃一个,然后将余下的桃子平均分成5份并拿走了自己的一份,问:这一堆桃子至少有几个?
求只猴子时,这一堆桃子的个数???
*/
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        //定义符合的数据数变量
        int sum = 0;
        //定义sum自增数量的判断条件,作为while循环的判断条件
        boolean flag = false;      
        while (!flag) {
        	//定义于外不为了能够扩大使用范围,作为for循环外部if语句的判断条件;
        	//并定义每次香蕉的剩余数量
            int i, count = sum;
            for (i = 0; i < n; i++) {
            	//每次猴子取走的一份香蕉个数
                int k = (count - 1) / n;
                //每次对猴子数取余都为1
                if (count % n == 1) {
                	//拿走一份后的和吃掉一个香蕉后的剩余数量
                    count = count - k - 1;
                }
                else {
                	//如果取余不为1,就终止这个for循环,执行下一个数的匹配
                    break;
                }
            }            if (i == n) {
            	//如果能够满足上述条件,i会自增到n就终止者层while循环,此时为最小的符合数据
            	//并将判断条件改变,终止整个while循环
                flag = true;
                break;
            }
            else {
            	//每次的数据不符合时,就自增1:相当于for循环,只是不需要自定义范围
                sum++;
            }
        }
        System.out.print("山上香蕉最少有:" + sum);   
    }
} 
 
 
注:while也可以利用for循环来实现,但要给出数量的范围且符合的数量有多个,需要取第一个,如下:
	public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        //定义符合的数据数变量
        int sum = 0;
        //定义sum自增数量的判断条件,作为while循环的判断条件
        boolean flag = false;      
        while (!flag) {
        	//定义于外不为了能够扩大使用范围,作为for循环外部if语句的判断条件;
        	//并定义每次香蕉的剩余数量
            int i, count = sum;
            for (i = 0; i < n; i++) {
            	//每次猴子取走的一份香蕉个数
                int k = (count - 1) / n;
                //每次对猴子数取余都为1
                if (count % n == 1) {
                	//拿走一份后的和吃掉一个香蕉后的剩余数量
                    count = count - k - 1;
                }
                else {
                	//如果取余不为1,就终止这个for循环,执行下一个数的匹配
                    break;
                }
            }            if (i == n) {
            	//如果能够满足上述条件,i会自增到n就终止者层while循环,此时为最小的符合数据
            	//并将判断条件改变,终止整个while循环
                flag = true;
                break;
            }
            else {
            	//每次的数据不符合时,就自增1:相当于for循环,只是不需要自定义范围
                sum++;
            }
        }
        System.out.print("山上香蕉最少有:" + sum);   
    }
}