本帖最后由 cat73 于 2014-7-5 18:45 编辑
这道题我的思路是这样的:
1.先理清数据之间的关系
假设最后一个猴子拿走了n个桃子,那么拿n*4就是最后剩下的桃子,n*5+1就是最后一只猴子拿之前剩下的桃子
最后一个猴子拿之前剩下的桃子/4*5+1就是第二个猴子拿之前剩下的桃子,依次类推上去
然后由于桃子的数量只可能是整数,所以只要判断这里面出现的所有数据是否都是整数即可
表格中的分析,绿色标记的是i的值:
- public static void main(String[] args) {
-
- int i = 0;
- while(!checkNum(++i));
- System.out.println("最后一个猴子拿走了" + i + "个桃子");
- System.out.println("最初的桃子数为:" + (((((i * 5 + 1) / 4 * 5 + 1) / 4 * 5 + 1) / 4 * 5 + 1) / 4 * 5 + 1));
- }
-
- /**
- * 检查传入的num是否符合条件
- * @param num 最后一个猴子拿走的桃子数
- * @return
- */
- public static boolean checkNum(int num){
- double t = num;
- t *= 5;
- t++;//最后一个猴子拿之前的桃子数
-
- for(int i = 0; i < 4; i++){
- t = t / 4 * 5 + 1;//计算出上次分桃之前剩余的桃子数量
-
- //检查本次要分的桃子数, 本次剩下的桃子数, 本次拿走的桃子数是否都是整数
- if(!(isInt(t) && isInt((t - 1) / 5 * 4) && isInt((t - 1) / 5)))
- return false;
- }
- return true;
- }
-
- /**
- * 检查一个数是否为整数
- * @param num 数字
- * @return 是否为整数
- */
- public static boolean isInt(double num){
- return (((int) num) == num);
- }
复制代码
输出为:
最后一个猴子拿走了255个桃子
最初的桃子数为:3121
|