美文网首页C语言
2019.2.27苏小红C语言

2019.2.27苏小红C语言

作者: sure_风雨与晴 | 来源:发表于2019-02-27 15:29 被阅读0次

    1.迭代法之水手分椰子问题

    五个水手来到一个岛上,采了一堆椰子后,因为疲劳都睡着了。一段时间后,第一个水手醒来,悄悄地将椰子等分成五份,多出1个椰子,便给了旁边的猴子,然后自己藏起1份,再将剩下的椰子重新合在一起,继续睡觉。不久,第二名水手醒来,同样将椰子了等分成五份,恰好也多出1个,也给了猴子。然而自己也藏起1份,再将剩下的椰子重新合在一起。以后每个水手都如此分了一次并都藏起一份,也恰好都把多出的1个给了猴子。第二天,五个水手醒来,发现椰子少了许多,心照不喧,便把剩下的椰子分成五份,恰好又多出1个,给了猴子。请问水手最初最少摘了多少个椰子?

    若某水手面对的椰子数是y个,则他前一个水手面对的椰子数是yx5/4+1个,以此类推。若对某一个整数y经过上述5次迭代都是整数,最后的结果即为所求。
    让x从1开始取值,y从5x+1开始取值,在按yx5/4+1进行的4次迭代中,若某一次y不是整数,则返回x增1再试,直到5次迭代的y值全部为整数时,打印的y值即为所求。
    一般的,对于n(n>1)个水手,按yxn(n-1)+1进行n次迭代可得n个水手分椰子的问题

    #include <stdio.h>
    #include <stdlib.h>
    
    int Coconut(int n);
    int main()
    {
        printf("y = %d\n", Coconut(5));
        return 0;
    }
    int Coconut(int n)
    {
        int i = 1;
        float x = 1, y;
        y = n*x + 1;
        do{
            y = y*n /(n-1) + 1;
            i++;
            if (y != (int)y)
            {
                x = x+1;
                y = n*x +1;
                i = 1;
            }
        }while(i < n);
        return (int)y;
    }
    

    2.魔术数字

    在一种游戏中,魔术师请一个人随意想出一个三位数abc(a,b,c依次是这个三位数的百位、十位、个位数字),并请这个人算出5个数acb、bac、bca、cab、cba的和N,再把N告诉魔术师,于是魔术师就可以说出这个人所想的abc。
    列竖式,显然有

    N = acb+bac+bca+cab+cba = 122a+212b+221c

    已知N,求解不定方程N=122a+212b+221c

    相关文章

      网友评论

        本文标题:2019.2.27苏小红C语言

        本文链接:https://www.haomeiwen.com/subject/bogxuqtx.html