鱼C论坛

 找回密码
 立即注册
查看: 2715|回复: 8

[趣题] 小仙趣题分享-38

[复制链接]
发表于 2014-9-5 17:27:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
话说某天一艘海盗船被天下砸下来的一头牛给击中了,5个倒霉的家伙只好逃难到一个孤岛,发现岛上孤零零的,幸好有有棵椰子树,还有一只猴子!大家把椰子全部采摘下来放在一起,但是天已经很晚了,所以就睡觉先.晚上某个家伙悄悄的起床,悄悄的将椰子分成5份,结果发现多一个椰子,顺手就给了幸运的猴子,然后又悄悄的藏了一份,然后把剩下的椰子混在一起放回原处,最后还是悄悄滴回去睡觉了.过了会儿,另一个家伙也悄悄的起床,悄悄的将剩下的椰子分成5份,结果发现多一个椰子,顺手就又给了幸运的猴子,然后又悄悄滴藏了一份,把剩下的椰子混在一起放回原处,最后还是悄悄滴回去睡觉了.又过了一会 ......又过了一会 ...总之5个家伙都起床过,都做了一样的事情 早上大家都起床,各自心怀鬼胎的分椰子了,这个猴子还真不是一般的幸运,因为这次把椰子分成5分后居然还是多一个椰子,只好又给它了.问题来了,这堆椰子最少有多少个?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-7 10:04:25 | 显示全部楼层
本帖最后由 andalousie 于 2014-9-7 10:13 编辑

@拈花小仙 小仙姐,这道题是编程题吧,数有点大。
1) 由于4和5互质,从20以内的数里面可以找到唯一能整除4且除以5余一的数,也就是16;根据中国剩余定理,可以知道任何20m+16 (m是自然数)都满足“能整除4且除以5余一”这一条件。
2) 在前面五次拿椰子以后,剩下的椰子数都满足上面1)中的条件。所以每次拿剩下的椰子数应为20m+16。
3) 假设其中一次后剩下的为20k+16,那么分之前必然是25k+21。而这又是上一次分剩下的。于是需要满足:
CodeCogsEqn.jpg
于是得到:
CodeCogsEqn.jpg
此外,可以得到,分之前的k'的值与分之后的k值之间的关系为
CodeCogsEqn.jpg
->于是,我写了一个程序来进行求解
#include <iostream>

int mem;

bool check_it(int k) {
    bool result = true;
    mem = k + k / 4 + 1;
    for (int i = 0; i < 4; ++i) {
        if (mem % 4 != 3) {
            result = false;
            break;
        }
        mem = mem + mem / 4 + 1;
    }
    return result;
}

int main() {
    int base = 3;
    while (!check_it(base)) {
        base += 4;
    }
    std::cout << 20 * mem + 16 << std::endl;
}
得出的结果是62496
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2014-9-5 17:33:38 | 显示全部楼层
这出得也忒快丫~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-7 15:29:35 | 显示全部楼层
andalousie 发表于 2014-9-7 10:04
@拈花小仙 小仙姐,这道题是编程题吧,数有点大。
1) 由于4和5互质,从20以内的数里面可以找到唯一能整除4 ...

@小甲鱼 老师,我发现各种趣题太适合锻炼编程水平了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-7 20:43:53 | 显示全部楼层
拈花小仙 发表于 2014-9-7 15:29
@小甲鱼 老师,我发现各种趣题太适合锻炼编程水平了~

这位童鞋小哥真是活学活用啊~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-7 22:03:58 | 显示全部楼层
andalousie 发表于 2014-9-7 10:04
@拈花小仙 小仙姐,这道题是编程题吧,数有点大。
1) 由于4和5互质,从20以内的数里面可以找到唯一能整除4 ...

@Angel丶L @仰望天上的光 @牡丹花下死做鬼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-7 22:30:47 | 显示全部楼层
#include<stdio.h>

int main()
{
        int i=1,r=1,j;
        while(r%4 != 0)
        {
s:                r = i*5+1;
                i++;
        }

        for(j = 1;j<6;j++)
        {
                r = r*1.25+1;
                if(r%4 != 0)
                {
                        goto s;
                }
        }

        printf("%d\n",r);

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2014-9-7 22:31:32 | 显示全部楼层
答案是 62496
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-7 23:01:21 | 显示全部楼层
看这个程序,有人能告诉我是为什么的吗
#include <iostream>

int main() {
    int mem = 3;
    for (int i = 0; i < 4; ++i) {
        mem = 5 * mem + 4;
    }
    mem = mem + mem / 4 + 1;
    std::cout << 20 * mem + 16 << std::endl;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 02:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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