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

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


相关推荐

  • ensp华为交换机配置vlan_路由表实例详解

    ensp华为交换机配置vlan_路由表实例详解综合实例拓扑图第一步:配置主机的IP地址、子网掩码以及网关第二步:SW1批量设置vlan,配置e0/0/1和e0/0/3为access模式,并将其划分为vlan10,配置e0/0/2为access模式,并将其划分为vlan20,配置e0/0/4和e0/0/5为trunk模式,并允许所有vlan通过第三步:SW2批量设置vlan,配置e0/0/1为access模式,并将其划分为vlan20,配置e0/0/2为access模式,并将其划分为vlan10,配置e0/0/3为trunk模式,并

  • CodeForces 377B—Preparing for the Contest(二分+贪心)

    CodeForces 377B—Preparing for the Contest(二分+贪心)

    2021年12月10日
  • jquery获取select多选框选中的值

    jquery获取select多选框选中的值

  • tar压缩文件

    tar压缩文件tar压缩的优点:兼容性好使用tar压缩文件tar-zcvftest.tar.gz./test/该命令表示压缩当前文件夹下的文件夹test,压缩后缀名为test.tar.gz如果不需要压缩成gz,只需要后缀为tar格式的,那么输入如下命令:tar-cvftest.tar./test/使用tar解压文件tar-xzvftest.tar.gz该命令表示把后缀为.tar.gz的文件解压到当前文件夹下。如果压缩文件的后缀是.tar,没有gz,则使用命令:tar-xvf

  • Java——数组转换为List集合

    Java——数组转换为List集合packageday04;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;/***数组转换为List集合*不能转换为Set集合,原因在于Set集合不能存放重复元素*@authorAdministrator**/publicclassToListDemo…

  • 程序心形曲线绘制_java输出心形图案

    程序心形曲线绘制_java输出心形图案代码如下:importjava.awt.Color;importjava.awt.Graphics;importjava.awt.Image;importjava.awt.Toolkit;importjavax.swing.JFrame;@SuppressWarnings(“serial”)publicclassDemoextendsJFrameimplementsRunna…

    2022年10月16日

发表回复

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

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