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

  • 相关阅读:
    debian 9安装细节
    gnome环境设置
    Linux之crontab定时任务
    独显切换进入图形界面思路
    pycharm多行注释
    如何在cmd中运行.py文件
    如何在 PyCharm 中设置 Python 代码模板
    在R中使用Keras和TensorFlow构建深度学习模型
    kubernetes cert-manager installation
    Simple way to create a tunnel from one local port to another?
  • 原文地址:https://www.cnblogs.com/davidshi/p/3349349.html
Copyright © 2011-2022 走看看