C++ HOJ 猴子分桃

原创 2015年07月09日 18:58:10
【题目描述】
老猴子辛苦了一辈子,给那群小猴子们留下了一笔巨大的财富——一大堆桃子。老猴子决定把这些桃子分给小猴子。
第一个猴子来了,它把桃子分成五堆,五堆一样多,但还多出一个。它把剩下的一个留给老猴子,自己拿走其中的一堆。
第二个猴子来了,它把桃子分成五堆,五堆一样多,但又多出一个。它把多出的一个留给老猴子,自己拿走其中的一堆。 
后来的小猴子都如此照办。最后剩下的桃子全部留给老猴子。 

这里有n只小猴子,请你写个程序计算一下在开始时至少有多少个桃子,以及最后老猴子最少能得到几个桃子。


【输入】

输入包括多组测试数据。

每组测试数据包括一个整数n(1≤n≤20)。

输入以0结束,该行不做处理。


【输出】

每组测试数据对应一行输出。

包括两个整数a,b。 

分别代表开始时最小需要的桃子数,和结束后老猴子最少能得到的桃子数。


【示例输入】
5

1

0


【示例输出】

3121 1025

1 1

【算法思想】

an表示第n个猴子来的时候,总共多少个桃子。

求特征函数: a1=a1-(a1-1)/5  ;a1=1          

求通项公式:{an+4}={a1+4}q^(n-1)={a1+4}(5/4)^(n-1)

【屌丝代码】

#include <stdio.h>
#include <iostream>
int main()
{
    int n, i;
    int sum, l, t;
    while (scanf("%d", &n)==1 && n)
{
        l = 1;
        for (i=1; i<n; i++)
            l *= 5;
        sum = 1+5*(l-1);
        t = sum;
        for (i=1; i<=n-1; i++)
            t = (t-1)/5*4;
        printf("%d %d\n", sum, t+n);
    }
printf("%d %d\n", sum, t+n);
    return 0;
}


【吊轨代码】

#include<iostream>  
#include<cmath>  
using namespace std;  
int main()  
{  
    int n;  
    long long total_num,old_num;  
    while(cin>>n && n!=0)  
    {  
        total_num=pow(5,n)-4;  
        old_num=n+pow(0.8,n)*pow(5,n)-4;  
        cout<<total_num<<" "<<old_num<<endl;  
    }  
    return 0;  
}  



【误区释疑】

1.总共一个猴子,那只猴子拿到的桃子数目为Numa;总共两个猴子拿桃子,最后一个猴子拿到的桃子数目为Numb;总共三只猴子拿桃子,最后一个猴子拿到的桃子数目为Numc。这里的Numa!=Numb!=Numc;

2.查找总共多少只猴子,如果按不论总共多少只猴子,最后一只猴子拿到的数目都是Num个,之前的猴子数目就会混淆,这里一定要区分开两个概念,总共N只猴子拿到的桃子数目和第N个猴子拿到的数目是不一样的。

猴子分桃类问题——java实现

本文是某公司2016年校招数据挖掘笔试题,总两道编程题,一个是猴子分桃类的,一个是骑士走棋盘类的,该文是前者的解决方案和自己经验的分享总结。 1. 来源及问题描述 猴子分桃的问题,网上一搜一大把,这里...
  • xytlwp
  • xytlwp
  • 2015年09月20日 23:00
  • 1622

五只猴子分桃,算法&面试

1.五只猴子分桃。半夜,第一只猴子先起来,它把桃分成了相等的五堆,多出一只。于是,它吃掉了一个,拿走了一堆; 第二只猴子起来一看,只有四堆桃。于是把四堆合在一起,分成相等的五堆,又多出一个。于是,它也...
  • a542214712
  • a542214712
  • 2012年10月29日 09:27
  • 13186

C++ HOJ 猴子分桃

本文给出两种实现猴子分桃子的算法思想,并附上C++源码实现。
  • u013630349
  • u013630349
  • 2015年07月09日 18:58
  • 1680

五十道编程小题目 --- 41 海滩上有一堆桃子,五只猴子来分 java

【程序41】  题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一 个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样...
  • wangnanwlw
  • wangnanwlw
  • 2016年09月09日 16:08
  • 4826

【编程题】-C++实现:五只猴子分桃

【编程题】-C++:五只猴子分桃。半夜,第一只猴子先起来,它把桃分成了相等的五堆,多出一只。于是,它吃掉了一个,拿走了一堆; 第二只猴子起来一看,只有四堆桃。于是把四堆合在一起,分成相等的五堆,又多出...
  • u012619319
  • u012619319
  • 2015年09月19日 23:33
  • 908

五猴分桃问题详解

题目有5只猴子在海边发现一堆桃子,决定第二天来平分.第二天清晨,第一只猴子最早来到,它左分右分分不开,就朝海里扔了一只,恰好可以分成5份,它拿上自己的一份走了.第2,3,4,5只猴子也遇到同样的问题,...
  • qq_23100787
  • qq_23100787
  • 2015年11月04日 22:00
  • 2197

[面试题]猴子分桃子递归超简练代码

Ps:哥不懂什么5^5 -4,哥只用代码说话,一行递归直接return搞定,全网最牛逼代码,没有之一。 Ps:转载请注明出处:聊城大学孙宇鹏。谢谢! 5只猴子份桃子,第1只先到,将桃子平均分成5份...
  • BrilliantCoder
  • BrilliantCoder
  • 2017年08月08日 21:57
  • 462

猴子分桃问题

5只猴子分一堆桃子,怎么也不能分成5等份,只好先去睡觉,准备第二天再分。夜里1只猴子偷偷爬起来,先吃掉1个桃子,然后将其分成5等份,藏起自己的一份就去睡觉了;第2只猴子又爬起来,吃掉1个桃子后,也将桃...
  • Hackbuteer1
  • Hackbuteer1
  • 2011年10月28日 14:37
  • 15624

猴子分桃二采用递归的方式

package lianx; public class MonKeyTao { static int ts=0;//桃子总数 int fs=1;//记录分的次数 static...
  • hello_word2
  • hello_word2
  • 2016年08月01日 14:36
  • 905

递归实现猴子分桃 java实现

5只猴子摘了一堆桃子,约好第二天早上来分。第一只猴子来得早,它将桃子平分成成5堆,多出1个,它把多出的一个吃了,把属于自己的一堆拿走了,将剩下的还混成一堆,其他猴子来了也正好按一样的方法处理。编程求出...
  • oSanYeCao1234567
  • oSanYeCao1234567
  • 2013年11月26日 20:08
  • 2299
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ HOJ 猴子分桃
举报原因:
原因补充:

(最多只允许输入30个字)