• 经典的猴子分香蕉问题


    public class Test7 {
    public static void main(String[] args) {
    /*猴子分香蕉
    猴子分桃的问题,网上一搜一大把,这里我贴出我搜到的结果:
    话说花果山水帘洞有5只聪明的猴子,有一天它们得到了一堆桃子,
    他们发现那堆桃子不能被均匀分5份,于是猴子们决定先去睡觉,
    明天再讨论如何分配。夜深人静的时候,猴子A偷偷起来,吃掉了一个桃子后,
    它发现余下的桃子正好可以平均分成5份,于是它拿走了一份;接着猴子B也起来先偷吃了一个,
    结果它也发现余下的桃子恰好可以被平均分成5份,于是它也拿走了一份;后面的猴子C、D、E一次如法炮制,
    先偷吃一个,然后将余下的桃子平均分成5份并拿走了自己的一份,问:这一堆桃子至少有几个?
    求只猴子时,这一堆桃子的个数???
    */
    Scanner input = new Scanner(System.in);
    int n = input.nextInt();
    //定义符合的数据数变量
    int sum = 0;
    //定义sum自增数量的判断条件,作为while循环的判断条件
    boolean flag = false;
    while (!flag) {
    //定义于外不为了能够扩大使用范围,作为for循环外部if语句的判断条件;
    //并定义每次香蕉的剩余数量
    int i, count = sum;
    for (i = 0; i < n; i++) {
    //每次猴子取走的一份香蕉个数
    int k = (count - 1) / n;
    //每次对猴子数取余都为1
    if (count % n == 1) {
    //拿走一份后的和吃掉一个香蕉后的剩余数量
    count = count - k - 1;
    }
    else {
    //如果取余不为1,就终止这个for循环,执行下一个数的匹配
    break;
    }
    }

    if (i == n) {
    //如果能够满足上述条件,i会自增到n就终止者层while循环,此时为最小的符合数据
    //并将判断条件改变,终止整个while循环
    flag = true;
    break;
    }
    else {
    //每次的数据不符合时,就自增1:相当于for循环,只是不需要自定义范围
    sum++;
    }
    }
    System.out.print("山上香蕉最少有:" + sum);
    }
    }

    注:while也可以利用for循环来实现,但要给出数量的范围且符合的数量有多个,需要取第一个,如下:

    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    int n = input.nextInt();
    //定义符合的数据数变量
    int sum = 0;
    //定义sum自增数量的判断条件,作为while循环的判断条件
    boolean flag = false;
    while (!flag) {
    //定义于外不为了能够扩大使用范围,作为for循环外部if语句的判断条件;
    //并定义每次香蕉的剩余数量
    int i, count = sum;
    for (i = 0; i < n; i++) {
    //每次猴子取走的一份香蕉个数
    int k = (count - 1) / n;
    //每次对猴子数取余都为1
    if (count % n == 1) {
    //拿走一份后的和吃掉一个香蕉后的剩余数量
    count = count - k - 1;
    }
    else {
    //如果取余不为1,就终止这个for循环,执行下一个数的匹配
    break;
    }
    }

    if (i == n) {
    //如果能够满足上述条件,i会自增到n就终止者层while循环,此时为最小的符合数据
    //并将判断条件改变,终止整个while循环
    flag = true;
    break;
    }
    else {
    //每次的数据不符合时,就自增1:相当于for循环,只是不需要自定义范围
    sum++;
    }
    }
    System.out.print("山上香蕉最少有:" + sum);
    }
    }

  • 相关阅读:
    Open_basedir 开启后项目变慢
    PHP导入百万级excel数据方案
    使用Python统计项目代码行数(Python3.X)
    AttributeError: '_io.TextIOWrapper' object has no attribute 'xreadlines'
    startTime = time.clock()AttributeError: module 'time' has no attribute 'clock
    SyntaxError: Missing parentheses in call to 'print'. Did you mean print
    误删 Win10 应用商店应该如何恢复?
    win10无法开启Windows Defender Firewall服务,错误1058
    设备管理器里面的AAP Server是什么?
    layui——Cannot create property 'LAY_TABLE_INDEX' on number '2'
  • 原文地址:https://www.cnblogs.com/plas/p/9899098.html
Copyright © 2020-2023  润新知