黑马程序员技术交流社区

标题: 约瑟夫环问题,看过来 [打印本页]

作者: iphone    时间: 2015-8-23 13:20
标题: 约瑟夫环问题,看过来
#include <stdio.h>
#include <stdlib.h>
int main () {
    int m = 7;                    //定义循环T出得数字
    int a[17], b[17];
    int i, del = -1, sum;      //del为后面要备用的下标,因为下表从0开始后面牵扯从1开始计算所以定义为-1
    for (i = 0; i <= 16; i++) {
        a[i] = i + 1;                 //数组a记录编号
        b[i] = 1;               //数组b标记是否出局,B组最后生下最后一个为1那么对应i坐标的a组最后一个就是了
    }
    printf("Pass:");
    for (sum = 17; sum > 1; sum--) {      //总人数递减,直到只剩一人
        for (i = 1; i <= m;) {        //在未出局的人中以7为轮次循环
            del = (del + 1) % 17; //后移下标,并控制在0~17之间
            if (b[del] == 1)
                i++;
        }
        printf(" %d", a[del]);
        b[del] = 0;
    }
    for (i = 0; b[i] == 0; i++);          //找出未出局的编号
    printf("\nThe winner is: %d\n\n", a[i]);
    return 0;
}

我从网上找的,备注的已经一清二楚了。。。你们开心不。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2