鱼C论坛

 找回密码
 立即注册
查看: 2454|回复: 13

[已解决]5个水手分椰子的问题

[复制链接]
发表于 2020-6-14 22:23:06 | 显示全部楼层 |阅读模式
30鱼币
A5630CA02892A03D25FF25E2BEBFD016.jpg
麻烦给一个详细的C编程思路,和源代码。谢谢!
最佳答案
2020-6-14 22:23:07
赚小钱 发表于 2020-6-15 12:16
1. 均分五份,藏一个,给猴子一个,等价于 count % 5 == 1; count = count / 5 - 1;
2. 最后均分五份 ...

之前审题有一些错误,原题说分成五份,藏掉一份,之前看成了一个。

修改部分的代码
int steal_peach(int input, int sailor_count) {
    for (int i = 0; i < sailor_count; i++) {
        int happiness = monkey_happy(input);
        if (happiness != 0) {
            return 0;
        }
        input = input / 5 * 4;
        if (input <= 0) {
            return 0;
        }
    }
    return input;
}
void steal() {
    int sailor_count = 5;
    for (int input = 6;; input++) {
        int result = steal_peach(input, sailor_count);
        if (result > 5 && result % 5 == 1) {
            printf("at least %d peaches!\n", input);
            return;
        }
    }
}

最佳答案

查看完整内容

之前审题有一些错误,原题说分成五份,藏掉一份,之前看成了一个。 修改部分的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-14 22:23:07 | 显示全部楼层    本楼为最佳答案   
赚小钱 发表于 2020-6-15 12:16
1. 均分五份,藏一个,给猴子一个,等价于 count % 5 == 1; count = count / 5 - 1;
2. 最后均分五份 ...

之前审题有一些错误,原题说分成五份,藏掉一份,之前看成了一个。

修改部分的代码
int steal_peach(int input, int sailor_count) {
    for (int i = 0; i < sailor_count; i++) {
        int happiness = monkey_happy(input);
        if (happiness != 0) {
            return 0;
        }
        input = input / 5 * 4;
        if (input <= 0) {
            return 0;
        }
    }
    return input;
}
void steal() {
    int sailor_count = 5;
    for (int input = 6;; input++) {
        int result = steal_peach(input, sailor_count);
        if (result > 5 && result % 5 == 1) {
            printf("at least %d peaches!\n", input);
            return;
        }
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-15 12:16:08 | 显示全部楼层
本帖最后由 赚小钱 于 2020-6-17 10:48 编辑

本答案审题有误,在楼下有修改。这个回答就不改了。
int monkey_happy(int input) {
    return (input % 5) - 1;
}

int steal_peach(int input, int sailor_count) {
    for (int i = 0; i < sailor_count; i++) {
        int happiness = monkey_happy(input);
        if (happiness != 0) {
            return 0;
        }
        input = input / 5 - 1;
        if (input <= 0) {
            return 0;
        }
    }
    return input;
}

void steal() {
    int sailor_count = 5;
    for (int input = 6;; input++) {
        int result = steal_peach(input, sailor_count);
        if (result == 6) {
            printf("at least %d peaches!\n", input);
            return;
        }
    }
}

1. 均分五份,藏一个,给猴子一个,等价于 count % 5 == 1; count = count / 5 - 1;
2. 最后均分五份多一个,并且要求最少(也只能要求最少),可以得出,原有6个。
3. 然后就是爆破。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-15 16:21:10 | 显示全部楼层
本帖最后由 405794672 于 2020-6-18 08:53 编辑
#include<stdio.h>
#if(0)
?
#endif

void main()
{
        

        int i,k,n;
        for (i = 4; i < 10000;i+=4)
        {
                n = i;
                for(k=0;k<5;k++)
                {                                n = n / 4 * 5 + 1;
                }
                if (k == 5)
                {
                        printf("原来最少有%d个桃子。\n", n);
                        
                }                
        }
}
        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-16 10:32:06 | 显示全部楼层
#include<stdio.h>
int main()
{
        int i;
        int count=1;        //题目要求为最少,可以采取逆向思维,即最后水手各分1个椰子
        for(i = 1; i <= 6; i++)                //循环6次,因为总共分了6次
        {
                count = count * 5 + 1;                // 计算从第六次到第一次每次分后椰子的数量
        }
        printf("%d",count);                //输出其值
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-16 11:08:14 | 显示全部楼层
本帖最后由 lwy2xxj 于 2020-6-17 11:06 编辑

冒泡算法 15621
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-16 15:51:58 | 显示全部楼层

哥们,逆向思维没错,可你逆向错了。第一次可以count*5+1。这个算出来的是什么呢?
算出来是第六天的椰子。也就是第五天分完剩下的椰子。而第五天是一个人拿走了五分之一,扔了一个
所以第五天就是你第一次计算count之后把它加上1,再除以四,再乘以5,才能得出第五天的椰子,即第四天分完剩下的椰子。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-16 22:28:27 | 显示全部楼层

我感觉最后一次还有水手一个都没有的可能  只有一个给了猴子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-17 08:39:05 | 显示全部楼层
赚小钱 发表于 2020-6-15 12:16
1. 均分五份,藏一个,给猴子一个,等价于 count % 5 == 1; count = count / 5 - 1;
2. 最后均分五份 ...

@二楼以下: 这个题目答案到底是多少  15621的有木有
345.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-17 10:45:20 | 显示全部楼层
wp231957 发表于 2020-6-17 08:39
@二楼以下: 这个题目答案到底是多少  15621的有木有

之前审题有误,已修正。答案是 15621。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-17 11:50:35 | 显示全部楼层
代码太溜了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-17 14:54:37 | 显示全部楼层
#include <stdio.h>
#include <math.h>

void main()
{
        int i;
        double k,x,y;
        i=1;k=1.0;y=k;

        while(i<=5)
        {
                i++;
                y=(4*y-1)/5;              //第一个y为第一个人藏的椰子数,往前算,如果连续5次都满足这个要求,那么就可以了
                if(y!=floor(y))
                {
                        k=k+1.0;
                        y=k;
                        i=1;
                }
        }
        x=5*k+1;
        printf("原有椰子至少有:%6.0f个\n",x);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-17 19:08:35 | 显示全部楼层
405794672 发表于 2020-6-16 15:51
哥们,逆向思维没错,可你逆向错了。第一次可以count*5+1。这个算出来的是什么呢?
算出来是第六天的椰 ...

哈哈,真尴尬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-17 19:14:53 | 显示全部楼层
405794672 发表于 2020-6-16 15:51
哥们,逆向思维没错,可你逆向错了。第一次可以count*5+1。这个算出来的是什么呢?
算出来是第六天的椰 ...

又看了一遍题,藏起来一份
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 15:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表