蓝桥杯猴子分香蕉_蓝桥杯少儿编程大赛试题

蓝桥杯猴子分香蕉_蓝桥杯少儿编程大赛试题packageexec;importjava.util.Scanner;/**问题描述  秋天到了,n只猴子采摘了一大堆苹果放到山洞里,约定第二天平分。这些猴子很崇拜猴王孙悟空,所以都想给他留一些苹果。第一只猴子悄悄来到山洞,把苹果平均分成n份,把剩下的m个苹果吃了,然后藏起来一份,最后把剩下的苹果重新合在一起。这些猴子依次悄悄来到山洞,都做同样的操作,恰好每次都剩下了m个苹果

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

Jetbrains全系列IDE稳定放心使用

package exec;

import java.util.Scanner;

/** 
问题描述
  秋天到了,n只猴子采摘了一大堆苹果放到山洞里,约定第二天平分。这些猴子很崇拜猴王孙悟空,所以都想给他留一些苹果。第一只猴子悄悄来到山洞,把苹果平均分成n份,把剩下的m个苹果吃了,然后藏起来一份,最后把剩下的苹果重新合在一起。这些猴子依次悄悄来到山洞,都做同样的操作,恰好每次都剩下了m个苹果。第二天,这些猴子来到山洞,把剩下的苹果分成n分,巧了,还是剩下了m个。问,原来这些猴子至少采了多少个苹果。
输入格式
  两个整数,n m
输出格式
  一个整数,表示原来苹果的数目
样例输入
5 1
样例输出
15621
数据规模和约定
  0<m<n<9 
 * @author Vivinia 
 * 
 */  
public class Apple {  
   
    public static void main(String args[]) {  
    	Scanner input=new Scanner(System.in);
    	int n=input.nextInt();
    	int m=input.nextInt();
    	input.close();
    	int  p, t, sum;  
        t = n+1;     //t需要循环的次数,因为虽然n个猴子,平分后吃掉m个一个n次,但是第二天还有一次,所以一共有n+1次
        p = 1;  
        while(t -- > 0)  
            p *= n;  
        sum   = p - ((n - 1 ) * m);  
        System.out.println(sum);  
    }
}  

今天才知道这是李政道教授1979年在中国科技大学少年班提出的一个问题,用普通暴力解法很耗时,所以教授找到了一个规律:

原题:
有5只猴子在海边发现一堆桃子,决定第二天来平分.第二天清晨,第一只猴子最早来到,它左分右分分不开,就朝海里扔了一只,恰好可以分成5份,它拿上自己的一份走了.第2,3,4,5只猴子也遇到同样的问题,采用了同样的方法,都是扔掉一只后,恰好可以分成5份.问这堆桃子至少有多少只

思路:
5的5次方+1-5=3121    
先给这些猴子4个桃子,    
第1只猴子多了4个桃子正好分成五份,拿走自己的部分(一堆多1个,给他的4个桃子留给第二个猴子);    
第2只猴子多了4个桃子正好分成五份,拿走自己的部分(一堆多1个,给他的4个桃子留给第三个猴子);    
………………………………    
第5只猴子多了4个桃子正好分成五份,拿走自己的部分(一堆多1个,给他的4个桃子留给第6个猴子);    
………………………..    
这就是说,有了这4个桃子,每次猴子都可以平均分成5份,可见,原来的总数必须是5的5次方的倍数,即3125,所以原来有3121个。

得出公式: x  =  (n ^ n+1) – ((n – 1) * m)                     (x是桃子总数,n是猴子个数,即分的次数,m是每次平分多的个数)

一开始我用的是比较容易理解的暴力激活成功教程,但是数据大了会超时:

package exec;

import java.util.Scanner;

/** 
问题描述
  秋天到了,n只猴子采摘了一大堆苹果放到山洞里,约定第二天平分。这些猴子很崇拜猴王孙悟空,所以都想给他留一些苹果。第一只猴子悄悄来到山洞,把苹果平均分成n份,把剩下的m个苹果吃了,然后藏起来一份,最后把剩下的苹果重新合在一起。这些猴子依次悄悄来到山洞,都做同样的操作,恰好每次都剩下了m个苹果。第二天,这些猴子来到山洞,把剩下的苹果分成n分,巧了,还是剩下了m个。问,原来这些猴子至少采了多少个苹果。
输入格式
  两个整数,n m
输出格式
  一个整数,表示原来苹果的数目
样例输入
5 1
样例输出
15621
数据规模和约定
  0<m<n<9
 * @author Vivinia 
 * 
 */  
public class Apple {  
   
    public static void main(String args[]) {  
    	Scanner input=new Scanner(System.in);
    	int n=input.nextInt();
    	int m=input.nextInt();
    	input.close();
    	double countPeach;    //桃子总数  
    	int peach;    //问原来最少有多少个桃子,桃子越多,猴子分的越多,既然求最少,所以从最后一只只猴子拿的开始计算,从小遍历,并且要求在每次分配时,桃子总数减1除以5必须整除  
        for(peach=0;;peach++) {      //最后一只猴子拿走后剩下的个数  
            countPeach=peach;            //countPeach一开始默认为最后一只猴子拿走后剩下的桃子,本次剩余的桃子*n/(n-1)等=拿走前的桃子,再+1=上一只猴子拿走后剩下的桃子,以此循环  
            for(int i=0;i<=n;i++) {           //作为循环次数,共几只猴子拿桃子,所以循环几次  
                countPeach=countPeach*n/(n-1)+m;  
            }  
            if(countPeach==(int)countPeach)       //循环结束后,判断是否为整除,如果不是整除,强制类型转换后结果不相等  
                break;          //如果相等代表符合要求,break跳出循环  
        }  
        System.out.println((int)countPeach);  
    }  
}  

因为之前做的是桃子,所以代码和注释就还是写桃子了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • datagrip2022安装教程与激活【2021最新】

    (datagrip2022安装教程与激活)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~0H…

    2022年3月31日
    512
  • 安卓关闭按键灯_怎么关闭电脑键盘灯光

    安卓关闭按键灯_怎么关闭电脑键盘灯光还在因为看电子书和看电影时键盘灯刺眼而苦恼吗?下面提供一个方法关闭键盘灯,让你轻松DIY!1、手机必须先Root。使用RE管理器,按照这个路径,找到文件:brightnesssys/devices/p

    2022年8月1日
    4
  • 常用经典SQL语句大全完整版–详解+实例

    常用经典SQL语句大全完整版–详解+实例下列语句部分是Mssql语句,不可以在access中使用。  SQL分类:  DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)  DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)  DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)  首先,简要介绍基础语句:  1、说明:创建数据库CREATED…

    2022年5月19日
    46
  • 左连接,右连接,内连接,全连接的区别及使用方式_外连接与内连接的区别

    左连接,右连接,内连接,全连接的区别及使用方式_外连接与内连接的区别左连接,右连接,内连接,全连接的区别及使用众所周知,我们在写sql时经常会用到多表查询数据,这就是涉及到连接的问题包括,左连接,右连接,内连接,全外连接。定义:左连接(leftjoin):返回包括左表的所有记录和右表中连接字段相等的记录右连接(rightjoin):返回包括右表的所有记录和左表中连接字段相等的记录等值连接或者叫内连接(innerjoin):只返回两表相连相等的行全外连接(fulljoin):返回左右表中所有的记录和左右表中连接字段相等的记录。只说概念还不够清晰举个例子

    2025年12月4日
    7
  • 5G网络切片综述 — 1

    5G网络切片综述 — 1简介随着5G时代的来临,21年的SA在国内的全范围商用,现阶段人们对于5G的必要性认识还不足。主要是目前人们用的5G主要集中在eMBB(enhancedMobileBroadband)即增强型移动带宽的阶段,而大数据业务如在线直播、高清视频等在4G上都得到了很好的支持,所以带宽的继续增大对于用户体验的边际效应递减。5G所带来的真正改善并不仅仅是在于大带宽,而在于5G提供了在同一张物理5G网络的情况下,同时能够提供eMBB,URLLC(Ultra-ReliableLow-LatencyCommun

    2022年10月2日
    4
  • Jmeter参数化请求

    Jmeter参数化请求参数化请求

    2025年9月19日
    4

发表回复

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

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