码迷,mamicode.com
首页 > 编程语言 > 详细

C语言用数组解决约瑟夫环问题

时间:2016-01-03 12:50:40      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:

       在罗马人占领乔塔帕特后,39 个犹太人与约瑟夫及他的朋友躲到一个洞中,大家决定宁愿自杀也不要被敌人抓到,于是确定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而约瑟夫和他的朋友并不想死去,那么他应该怎样安排他和他的朋友的位置,才能逃脱这场死亡游戏呢?

        用C语言解决约瑟夫环问题的最佳方式是采用循环链表,但使用数组同样也可以解决瑟夫环的问题。采用循环链表的方法,以后详述。本节主要讲解如何用数组的方式解决约瑟夫环的问题。

        程序如下所述:

#include<stdio.h>
#define LEN 41

void main(){
    int a[LEN];
    for(int i=0;i<LEN;i++){a[i] = 1;}   // 数组初始化,1:表示为活着;0:表示自杀

    int leftCount = LEN;                // 计数器leftCount:计数剩下的人
    int index = 0,count = 0;            // 1.数组下标index;2.循环计数器count

    while(leftCount>2){                 // 当还剩下两个人结束

        if(a[index] == 1){ 
            count++; 
            if(3 == count){             // 计数到3,1.自杀;2.循环计数器count重新开始计数;3.计数器leftCount减1
                a[index] = 0;
                count = 0;
                leftCount--;
            }
        }
        index++;

        if(index == LEN){index = 0;}    // 当到数组尾,数组下标index置零,重新开始
    }

    for(int j=0;j<LEN;j++){             // 输出结果
        if(1 == a[j]){ printf("剩下两个人为第%d个\n",j+1); }
    }
}

             输出结果为:

技术分享

C语言用数组解决约瑟夫环问题

标签:

原文地址:http://www.cnblogs.com/nilian/p/5095915.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!