雷火电竞-中国电竞赛事及体育赛事平台

歡迎來(lái)到入門教程網(wǎng)!

C語(yǔ)言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語(yǔ)言 >

約瑟夫環(huán)問(wèn)題(數(shù)組法)c語(yǔ)言實(shí)現(xiàn)

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語(yǔ)言|點(diǎn)擊:

問(wèn)題說(shuō)明
這個(gè)問(wèn)題是以弗拉維奧·約瑟夫斯命名的,它是1世紀(jì)的一名猶太歷史學(xué)家。他在自己的日記中寫道,他和他的40個(gè)戰(zhàn)友被羅馬軍隊(duì)包圍在洞中。他們討論是自殺還是被俘,最終決定自殺,并以抽簽的方式?jīng)Q定誰(shuí)殺掉誰(shuí)。約瑟夫斯和另外一個(gè)人是最后兩個(gè)留下的人。約瑟夫斯說(shuō)服了那個(gè)人,他們將向羅馬軍隊(duì)投降,不再自殺。約瑟夫斯把他的存活歸因于運(yùn)氣或天意,他不知道是哪一個(gè)機(jī)智的約瑟夫!

    有N個(gè)編號(hào)為1~N的人圍成一圈,現(xiàn)在每隔兩個(gè)人(比如:1、4 之間隔了2、3)就將一個(gè)人淘汰出去,問(wèn)最后剩下的是編號(hào)為幾的人?

算法代碼如下

復(fù)制代碼 代碼如下:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int people_count = 0;
    int *peoples = NULL;
    printf("please input people number: ");
    scanf("%d", &people_count);
    if (people_count < 2){
        printf("can't do Joseph\n");
    }
    peoples = (int *)calloc(people_count, sizeof(int));
    int i;
    for(i = 0; i < people_count; i++){
        peoples[i] = i+1;
    }
    i = 0;
    int j = 0;
    int rest = people_count;
    while(rest){
        if (i >= people_count){
            i %= people_count;
        }
        if (peoples[i] == 0){
            i++;
            continue;
        }
        if (j++ % 3 ==0 && rest > 1){
            printf("kill people NO. %d\n", peoples[i]);
            peoples[i] = 0;
            rest--;
        }else if (rest==1){
            printf("NO. %d is alive\n", peoples[i]);
            rest--;
        }
        i++;
    }
    system("pause");
    return 0;
}

上一篇:純C語(yǔ)言:遞歸二進(jìn)制轉(zhuǎn)十進(jìn)制源碼分享

欄    目:C語(yǔ)言

下一篇:c語(yǔ)言生成隨機(jī)數(shù)的方法(獲得一組不同的隨機(jī)數(shù))

本文標(biāo)題:約瑟夫環(huán)問(wèn)題(數(shù)組法)c語(yǔ)言實(shí)現(xiàn)

本文地址:http://www.jygsgssxh.com/a1/Cyuyan/3847.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有