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

蓝桥杯猴子分香蕉_蓝桥杯少儿编程大赛试题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);  
    }  
}  

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 香港手机号正则表达式「建议收藏」

    香港手机号正则表达式「建议收藏」刚遇到一个问题,不了解香港手机号的规则,现在记录下来,方便以后查看香港手机号码正则:^([6|9])\d{7}$澳门手机号码正则:^[0][9]\d{8}$大陆:^[1][3-8]\d{9}$正则表达式:^[1][3-8]\d{9}$|^([6|9])\d{7}$|^[6]([8|6])\d{5}$这是规则:大陆:开头13-8号码

  • GoogLeNet论文学习笔记

    GoogLeNet论文学习笔记GoogLeNet论文学习笔记Abstract提出一种叫做inception的卷积神经网络结构,基于inception构建的22层的深度网络(GoogLeNet)刷新了ILSVRC14分类和检测任务的stateofart。这种结构的主要特点就是加大了网络的深度和宽度,并且不增加运算量,提高了计算资源的利用效率。为了优化效果,inception结构的设计基于海扁准则和多尺度处理问题的直觉。

  • implicature语言学定义_论文用书上的内容查重吗

    implicature语言学定义_论文用书上的内容查重吗本文发表在ACL2019,使用信息实体增强语言表示的ERNIE的翻译。同时还有另一种百度提出的ERNIE–ByBriskYu感觉关键在于知识实体的构建看TransEERNIE:使用信息

  • vim配置总结[通俗易懂]

    vim配置总结[通俗易懂]本篇博客主要包含我使用的vim配置和相关插件。也作一个常用vim快捷键的记录

  • php dropdownlist,遇到dropdownlist[通俗易懂]

    php dropdownlist,遇到dropdownlist[通俗易懂]ASP.NETDropdownlist错误”CannothavemultipleitemsselectedinaDropDownList.”问题有时,当我们试图指定一个ASP.NETDropdownlist选中的项目时遇到这样的报错”CannothavemultipleitemsselectedinaDropDownList.”使用下面这些代码有可能出现这个报错…

    2022年10月16日
  • getopt getopts

    getopt getopts一.getopt1.使用getoptoptstringoptionsparametersoptstring定义了命令行有效的选项字母,还定义了哪些选项字需要参数,需要参数的选项后面加:即可;如果指定了一个不在optstring中的选项,默认情况下,getopt命令会产生一条错误消息,如果想要忽略,可以加上-q选项;getoptab:cd-a-bte

发表回复

您的电子邮箱地址不会被公开。

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