用循環(huán)數(shù)組解決約瑟夫環(huán)問題

N個人圍成一圈順序編號,從1號開始按1、2、3…順序報數(shù),報p者退出圈外,其余的人再從1、2、3開始報數(shù),報p的人再退出圈外,以此類推,按退出順序輸出每個退出人的原序號。

#define M 100    // M > N
void Joseph(int N, int p) {
    int queue[M];
    int head, tail, i;
    for (i = 1; i <= N; i++) {
        queue[i] = i;
    }
    head = 1;
    tail = N;
    i = 1;
    while (head != tail) {
        if (i != p) {
            tail = ++tail % M;
            queue[tail] = queue[head];
        }
        else {
            printf("%d ", queue[head]);
            i = 0;
        }
        i++;
        head = ++head % M;
    }
    printf("%d\n", queue[head]);
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容