用java解决猴子偷桃的数学问题

代码如下:


/**
 * 猴子分桃问题:海滩上有一堆桃子,五只猴子来分。 第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。
 * 第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份, 第三、第四、第五只猴子都是这样做的,
 * 问海滩上原来最少有多少个桃子? tip: 第二次的temp=(x-1)-(x-1)/5
 */


/**
 * 猴子分桃问题:海滩上有一堆桃子,五只猴子来分。 第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。
 * 第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份, 第三、第四、第五只猴子都是这样做的,
 * 问海滩上原来最少有多少个桃子? tip: 第二次的temp=(x-1)-(x-1)/5
 */

// 主程序入口
class Main {

	public static void main(String[] args) {
		// 定义统计次数变量
		int count = 0;
		// 定义临时变量
		int temp = 0;
		// 开始从小到大循环进行穷举
		for (int i = 2;; i++) {
			// 每次循环都初始化次数为0
			count = 0;
			// 内层循环5次
			for (int j = 0; j <= 5; j++) {
				// 如果是首次循环,那么我们要判断是否能够被5整除,就需要先让猴子把桃子吃掉,当前桃子数量就为temp
				if (count == 0) {
					// temp数量=开始的数量i-1
					temp = i - 1;
				}
				// 如果不是首次循环,因为第二次循环我们继续判断是否能被5整除,所以临时变量temp不再是i-1了,因为i在外层循环,内层循环是不变的
				if (count != 0) {
					// temp的值=之前的temp的值-1/5份的temp再减1
					temp = temp - 1;
				}
				// 如果内层循环达到了5次
				if (count == 5) {
					// 那么直接输出外层循环i的值
					System.out.println(i);
					//终止程序
					return;

					// 反之,如果temp临时变量能够被5整除,那么计数器count自增,且temp的值=temp-temp/5
				} else if (temp % 5 == 0) {
					count++;
					temp = temp - temp / 5;
					// 如果无法满足上面所有条件,证明这个i是错误的,结束当前内层循环
				} else {
					break;
				}
			}
		}
	}
}


你可能感兴趣的:(java,逻辑)