Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31090
  • 博文数量: 12
  • 博客积分: 655
  • 博客等级: 上士
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-15 16:45
文章分类

全部博文(12)

文章存档

2011年(1)

2009年(1)

2008年(10)

我的朋友
最近访客

分类: C/C++

2008-04-22 23:42:17

大约在基督诞生的时期,那时是古罗马的统治时代,为了抵抗入侵者的压迫,犹太人民进行了顽强的抵抗,其中的一次战役中,约瑟夫及其他四十个伙伴不幸被包围,他们决定誓死不降,按照犹太的教义,人是不可以自杀的,于是他们想出一个办法,大家围成一个圈,由一个人开始报数,数到一的人杀死数到五的人,这样直至最后只有一个人还活着,那么他只能自杀,于是不断的有人死去,真到最后,约瑟夫幸存了下来,其实并不是他幸运,而是他事先已经计算好了自己应该站的位置,因为他不想死掉,今天,我们写一个简短的程序就可以轻松的计算出来当年约瑟夫所站的位置,但是我还是对约瑟夫肃然起敬,他一定是一个数学天才,这段历史我也是道听途说,如与历史不符,请以正史为准。以下是用C写的约瑟夫环,只考虑逻辑,未加注释及容错处理。

#include
#include

typedef struct node *link;
struct node{
    int item;
    link next;
};

link NODE(int item, link next)
{
    link t = malloc(sizeof *t);
    t->item = item;
    t->next = next;

    return t;
}

int main(int argc, char *argv[])
{
    int i,N,M;
    int j = 0;
    N = atoi(argv[1]);
    M = atoi(argv[2]);

    link t = NODE(1,NULL);
    t->next = t;

    for (i = 2; i <= N; i++)
        t = t->next = NODE(i,t->next);

    while (t != t->next){
        for (i = 1; i < M; i++)
            t = t->next;
        printf("the NO.%d person is:%d\n",++j,t->next->item);

        t->next = t->next->next;
    }
    printf("the saved person is :%d\n",t->item);

    return 0;
}

阅读(988) | 评论(0) | 转发(0) |
0

上一篇:技术人生从 hello,world开始

下一篇:思考

给主人留下些什么吧!~~