猴子分苹果问题递归算法_猴子分苹果递推公式

猴子分苹果问题递归算法_猴子分苹果递推公式试题算法训练猴子分苹果题目描述:资源限制时间限制:1.0s内存限制:256.0MB问题描述  秋天到了,n只猴子采摘了一大堆苹果放到山洞里,约定第二天平分。这些猴子很崇拜猴王孙悟空,所以都想给他留一些苹果。第一只猴子悄悄来到山洞,把苹果平均分成n份,把剩下的m个苹果吃了,然后藏起来一份,最后把剩下的苹果重新合在一起。这些猴子依次悄悄来到山洞,都做同样的操作,恰好每次都剩下了m个…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

试题 算法训练 猴子分苹果

题目描述:

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  秋天到了,n只猴子采摘了一大堆苹果放到山洞里,约定第二天平分。这些猴子很崇拜猴王孙悟空,所以都想给他留一些苹果。第一只猴子悄悄来到山洞,把苹果平均分成n份,把剩下的m个苹果吃了,然后藏起来一份,最后把剩下的苹果重新合在一起。这些猴子依次悄悄来到山洞,都做同样的操作,恰好每次都剩下了m个苹果。第二天,这些猴子来到山洞,把剩下的苹果分成n分,巧了,还是剩下了m个。问,原来这些猴子至少采了多少个苹果。
输入格式
  两个整数,n m
输出格式
  一个整数,表示原来苹果的数目
样例输入
5 1
样例输出
15621
数据规模和约定
  0<m<n<9
  
题意:

该题简化为这样,n个猴子,每个猴子将所看到的苹果均分为n份,多余m个苹果。拿走m个以及一份。求原来苹果的个数。

思路:

假设某一次猴子操作之前的苹果个数为sum2,操作之后的苹果个数为sum1,每一份苹果个数为num(中间变量)。那么
①sum2=n*num+m;
由①可知:(sum2-m)刚好是n整份(没有余数)的苹果
②sum1=sum2-num-m(拿走m个以及一份)
由②可知:sum1=(sum2-m)-num【(sum2-m)是n整份,再减去num,就是(n-1)份的苹果】,所以sum1就是(n-1)份的苹果,每一份的个数为num。
所以sum1与sum2个关系为:
sum1×n/(n-1)=sum2-m;可以推出:sum1×n/(n-1)+m=sum2;

注意:

(1)确定一个值,即第n只猴子操作完(拿了m个苹果,又藏了一份苹果)之后苹果的个数。
(2)该题是蓝桥杯的题,但是我觉得有一个问题,那就是题目第一个测试数据出错,第二天猴子们把苹果分成n份时,一份至少1个,所以本题不是百分之百正确。

有bug的测试数据如下:

2 1

7
(这样的话,就意味着第n只猴子操作完只剩下1个苹果啦,没办法再分成2份啦,所以我觉得蓝桥杯该题存在的一个问题,但是不影响大家学习,这道题)
这个测试数据正确的答案应该是15

代码:

#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;
int sum[10];
int main()
{ 
   	
	int n,m,flag,i,temp=0;
	cin>>n>>m;
	memset(sum,0,sizeof(sum));
	int num;//第n只猴子操作结束后分成 n份,每一份的个数 
	for(num=1;;num++)//注意这里,最好不要限制num的最大值,算出最后的答案结束即可 
	{ 
   
		sum[1]=n*num+m;//最后一只猴子操作完之后的苹果个数 
		if(((sum[1]-m)%n==0)&&(sum[1]%(n-1)==0))
		{ 
   
			for(i=2;i<=n+1;i++)//操作n次(因为有n只猴子) 
			{ 
   
				flag=0;
				if(sum[i-1]%(n-1)==0&&(sum[i-1]-m)%n==0)
				{ 
   
					sum[i]=sum[i-1]*n/(n-1)+m;//计算结果如上面思路中所写 
					if(sum[n+1])//算出来原来的苹果数就输出,且结束 
					{ 
   
						cout<<sum[n+1]<<endl;
						return 0;
					}
				}
				else
				{ 
   
					flag=1;//计算过程中,某次操作中,苹果的个数不符合要求 
					break;//要求((sum[1]-m)%n==0)&&(sum[1]%(n-1)==0) 
				}
			}
			if(flag)//继续寻找最后一只猴子操作完的苹果个数 
				continue;
		}
	}
	return 0; 
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182725.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月12日 下午5:46
下一篇 2022年10月12日 下午5:46


相关推荐

  • php ltrim redis,Redis Ltrim 命令

    php ltrim redis,Redis Ltrim 命令RedisLtrim 命令 RedisLtrim 对一个列表进行修剪 trim 就是说 让列表只保留指定区间内的元素 不在指定区间之内的元素都将被删除 下标 0 表示列表的第一个元素 以 1 表示列表的第二个元素 以此类推 你也可以使用负数下标 以 1 表示列表的最后一个元素 2 表示列表的倒数第二个元素 以此类推 语法 redisLtrim 命令基本语法如下 redis127 0

    2026年3月19日
    3
  • vue转json串_vue中怎么声明一个数组

    vue转json串_vue中怎么声明一个数组一些常用更多方法介绍文章目录前言一、vue对象转数组?二、JSON数据转换1、JSON.parse2、JSON.stringify2.1、JSON.stringify高级使用总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、vue对象转数组?示例:工作中我们经常会因为和接口收到数据类型不一致,这个时候需要我们自己手动转换.

    2025年10月22日
    6
  • windows下cmd查看端口占用情况,并关闭占用端口进程「建议收藏」

    windows下cmd查看端口占用情况,并关闭占用端口进程「建议收藏」1.netstat-ano|findstr”3333″假设返回情况如下:C:\Users\Administrator>netstat-ano|findstr”3333″UDP0.0.0.0:3333*:*85242.tasklist|findstr”8524…

    2022年5月19日
    41
  • idea控制台中文乱码的解决方法(最后一种亲测有效)

    idea控制台中文乱码的解决方法(最后一种亲测有效)idea 控制台中文乱码的解决方法 三种 亲测有效 问题情况 IntelliJIDEA 控制台输出中文乱码部分如图所示 解决方法 方法一 1 打开 tomcat 配置页面 EditConfigur 2 选择项目部署的 tomcat 在配置项 VMoptions 文本框中输入 Dfile encoding UTF 8 点击 Apply 或 OK 即可 3 尝试重启 tomcat 乱码问题解决 ps 若乱码问题依然存在 请尝试继续按以下步骤解决 方法二 1 打开 IntelliJIDEA 本地安

    2026年3月27日
    19
  • 金三银四,教你编写一份脱颖而出的简历,从而 offer 手到擒来,要参加校招的同学要提前准备了「建议收藏」

    金三银四,教你编写一份脱颖而出的简历,从而 offer 手到擒来,要参加校招的同学要提前准备了「建议收藏」最近一段时间不是金三银四嘛,有不少同学通过CSDN私信的方式把简历发给我,要我给出一些建议。看多了以后,我发现,有些同学根本不知道怎么写简历,格式乱七八糟,填写的个人经历就像是记流水账一样,完全勾不起我的任何兴趣。那,招聘方应该比我更苛刻,所以这样的简历投递出去,石沉大海的几率很大啊。2014年,我从苏州回到了洛阳,那是我最后一次投简历,现在还在招聘网站上挂着——公开的。嗯,在这么多年的时间里,并没有招聘方和猎头通过这份挂出去的简历给我打电话,虽然我的联系方式一直没变。那只能说明一点,我当时写的简历

    2022年5月2日
    37
  • 在html中加下划线

    在html中加下划线方法一:用&lt;u&gt;&lt;/u&gt;标签方法二:用text-decoration:underline;方法三:用border:1pxsolid;     padding:5px;如下范例:范例对应的结果:

    2022年6月4日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号