美文网首页
猴子分桃问题

猴子分桃问题

作者: 敲可爱的小超银 | 来源:发表于2017-12-02 21:28 被阅读0次

一、顺推方法

用循环遍历可能的桃子总数,最开始为队员总数加一,满足1.(sum-1)%n==0 并下一次分桃时sum的值变为((sum-1)/n)*(n-1)

每个队员所面对的(上一个留下的)桃子数都可以实现分配即可,用k计数来实现,如不满足条件1跳出循环将桃子数+队员数再进行遍历。

最后对k进行判断如果k不等于队员数,同样需要更新桃子数进行再次循环,此时上次循环中的部分变量值需更新,比如k;

注意:sum的值属于每次循环的可变值,变为分配完的桃子数,需要变量x来进行桃子数+队员数

记得最后的总数因为多加了一次队员数,所以需要减去

#include<iostream>

using namespace std;

int sum;

void pitch(int n)

{

int k=0;

int x = n + 1;

while (k != n)

{

k=0;

sum = x;

for (int i = 0; i < n; i++)

{

if ((sum - 1) % n == 0&&sum!=1)

{k++;}

else {break;}

sum = ((sum - 1) / n)*(n - 1);

}

x += n;

}

cout << x- n <<" "<<sum<<endl;

}

int main()

{

int n;//队员人数

while (scanf_s("%d", &n) != EOF)

{

pitch(n);

}

system("pause");

return 0;

}

递推法实现

bool check_num(int num,int k=1){ //k标志面临桃子数可分的猴子数

if((num-1)%5!=0)return false;

if(k==5)return true;

return check_num((num-1)*4/5,++k);

}

int pitch_num(){ //返回满足条件的S1

for(int i=6;;i+=5)

if(check_num(i))return i;

}

二、逆推法

第n个面对的桃子数可分且sum%4==0即可,k作为计数判断,k!=n-1,因为前面判断过一次第n个是否可分,并且式子变为(sum/(n-1))*m+1;根据互相的递推关系不用判断是否可余5,并且每次循环变量值变化为+4.

ps.在程序开头加上#define _CRT_SECURE_NO_WARNINGS或者#pragma warning(disable:4996),可关闭安全检查,当然在oj上要去掉

相关文章

  • 猴子分桃问题

    一、顺推方法 用循环遍历可能的桃子总数,最开始为队员总数加一,满足1.(sum-1)%n==0 并下一次分桃时su...

  • Swift - 猴子分桃问题

    题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走...

  • 在医院里

    一. 猴子分桃 悟空得道后,每个月给花果山的猴子配送仙桃。 花果山的猴子,每月分桃,每天都有桃子吃。 但,总有些猴...

  • 猴子分桃子.java

    问题描述:猴子分桃:海 滩上有一堆桃子,五只猴子来分。 第一只猴子把这堆桃子凭据分为五份,多了一个, 这只猴子把多...

  • java猴子偷桃问题

    问题描述:猴子分桃:海 滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一...

  • 朝三暮四的故事

    给猴子分桃子,告诉猴子早上三个,晚上四个,猴子们都不乐意。 然后换了一下,告诉猴子早上四个,晚上三个,猴子们都很开...

  • JS基础之猴子分桃!

    猴子分桃:海 滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个, 这只猴子把多的一个扔入海...

  • 猴子分桃 (经典面试题)

    一只猴子摘桃子,摘累了,决定休息一下再分桃子。过了一会,来了一只猴子,把所有桃子均分成了5分,结果多了1个,就把多...

  • python练手_80-猴子分桃

  • 通俗易懂、简单粗暴得解决猴子分桃问题

    起因 海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子分为五份,多了一个,这只猴子把多的一个仍入海中,拿走了一...

网友评论

      本文标题:猴子分桃问题

      本文链接:https://www.haomeiwen.com/subject/ahrnbxtx.html