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

蓝桥杯猴子分香蕉_蓝桥杯少儿编程大赛试题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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Visual Studio 2010 and .NET Framework 4 Release Candidate发布

    Visual Studio 2010 and .NET Framework 4 Release Candidate发布

    2021年8月5日
    64
  • java的线程是用户态还是内核态_内核态和用户态的区别

    java的线程是用户态还是内核态_内核态和用户态的区别内核态用户态是什么?操作系统对程序的执行权限进行分级,分别为用户态和内核态。用户态相比内核态有较低的执行权限,很多操作是不被操作系统允许的,简单来说就是用户态只能访问内存,防止程序错误影响到其他程序,而内核态则是可以操作系统的程序和普通用户程序内核态:cpu可以访问计算机所有的软硬件资源用户态:cpu权限受限,只能访问到自己内存中的数据,无法访问其他资源为什么要有用户态和内核态?系统需要限制不同的程序之间的访问能力,防止程序获取不相同程序的内存数据,或者外围设备的数据,并发送到网络,所有cpu

    2022年9月14日
    2
  • 如何删除苹果X的通讯录_iis配置php

    如何删除苹果X的通讯录_iis配置php一、 隐藏server信息先下载urlrewrite并安装附:Urlrewrite工具下载https://www.iis.net/downloads/microsoft/url-rewrite在网站目录下web.config文件以下位置<system.webServer>里修改<rewrite><outboundRulesrewriteBeforeCache=”true”><rulename=”RemoveServ

    2022年9月29日
    3
  • 浅谈golang中的代理模式

    浅谈golang中的代理模式来自一个大佬的博客,建议食用设计模式不分语言,是一种思维层面的体现,但是不能在不同语言中使用同一套实现(每种语言有不同的特性),比如go,本身是没有继承一说,但是通过结构体的组合来实现语义上的继承。而多态也是通过接口的方式来实现的。下方的图来自于大佬博客,贴在这里方便查看!!!设计原则设计模式结构型模式代理模式首先,我们知道代理模式中分为静态代理和动态代理。静态代理需要在编译前就要写好,而动态代理需要在运行时通过反射来实现方法增强。上述的话,太过粗糙,下面列举一下双方的区别:静态代理:

    2022年7月26日
    13
  • JAVA中action_java string contains方法

    JAVA中action_java string contains方法该楼层疑似违规已被系统折叠隐藏此楼查看此楼ActionContext.getContext()返回的是一个ActionContext对象,get(Stringkey)也是ActionContext里面的一个方法。xwork源码贴出来了:publicclassActionContextimplementsSerializable{staticThreadLocalactionCon…

    2022年9月9日
    1
  • HTTPClient和CloseableHttpClient

    使用HttpClient发送请求的一般步骤(1)创建HttpClient对象。(2)创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。(3)如果需要发送请求参数,可调用HttpGet同的setParams(HetpParamsparams)方法来添加请求参数;对于HttpPost对象而言,可调…

    2022年4月9日
    268

发表回复

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

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