A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 万里天 中级黑马   /  2015-2-24 08:56  /  1150 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 万里天 于 2015-2-24 09:02 编辑

    约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。

        int  str[13] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
    int number = 13,count = 0,i =0;
    while (number > 1) {    //number 表示人数
        if (str != 0) {
            count++;
        }
        if (count == 3) {//如果count的值为3,则表示报到的数为"3"
            str = 0; //此时将此人的值赋值为0,表示此人已经排除
            count = 0;//count重新赋值为0
            number--;//人数减1
        }
        i++;
        if (i ==13) {//由于是围成一圈,当值等于13时,强制将其设置为0
            i = 0;
        }
        }
    printf("出卖耶稣叛徒的序号为:");
    for (int i = 0; i< 13; i ++) {
        if (str > 0) {
            printf("%d  ",str);
        }
    }

1 个回复

倒序浏览
您需要登录后才可以回帖 登录 | 加入黑马