zoukankan      html  css  js  c++  java
  • 猴子分桃问题——一个简单的递归

    五只猴子分桃。半夜,第一只猴子先起来,它把桃分成了相等的五堆,多出一只。于是,它吃掉了一个,拿走了一堆; 第二只猴子起来一看,只有四堆桃。于是把四堆合在一起,分成相等的五堆,又多出一个。于是,它也吃掉了一个,拿走了一堆;......其他几只猴子也都是 这样分的。问:这堆桃至少有多少个?

    我自己是这样想的,问题得从最后那个猴子看起,最后那个猴子依然能将桃子分5堆剩一个,则设在最后那个猴子之前剩下数量是A,A%5=1并且还能平分成4堆没有剩余,所以A%4=0。然后,倒数第二只猴子之前的数量就是A+A/4+1个,并且重复之前的步骤,如果在到第一只猴子之前都没遇到问题,那么就能得出结果了。如果在中间出现问题则全部回退到最后那只猴子,重新计算数量。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication64
    {
    class Program
    {
    static void Main(string[] args)
    {
    Console.WriteLine(monkeyPickPeach(5));
    Console.ReadKey();
    }

    static int monkeyPickPeach(int monkeyNum)
    {
    Int32 resultNum = 1;
    Int32 monkeyPicked = 0;
    Int32 temp = 0;
    Int32 tempSum = 0;
    bool isTemp = false;

    while (monkeyPicked < monkeyNum)
    {
    temp = resultNum / 4 + 1;

    if (!isTemp)
    {
    tempSum = 0;
    }

    if ((resultNum + temp) % 5 == 1 && resultNum % 4 == 0)
    {
    resultNum = resultNum + temp;
    tempSum += temp;
    monkeyPicked++;
    isTemp = true;
    }
    else
    {
    if (isTemp)
    {
    resultNum -= tempSum;
    }

    resultNum++;
    monkeyPicked = 0;
    isTemp = false;
    }
    }

    return resultNum;
    }
    }


    }

    输出结果为:3121

  • 相关阅读:
    运算符优先级
    Tips—查询某结构体
    在线词典--(一、流程分析)
    数据库—SQLite3
    回调函数(转载)
    UNIX域套接字
    进程间通信小结
    HDU_oj_2027 统计元音
    HDU_oj_2026 首字母变大写
    HDU_oj_2025 查找最大字母
  • 原文地址:https://www.cnblogs.com/davidshi/p/3349349.html
Copyright © 2011-2022 走看看