C語言經典例69 有n個人圍成一圈報數問題

2021-10-02 22:01:23 字數 718 閱讀 6900

有n個人圍成一圈,順序排號。從第乙個人開始報數(從1到3報數),凡報到3的人退出圈子,問最後留下的是原來第幾號的那位。

假設全部人都退圈,則最後乙個退圈的人就是題目中留下的那一位,詳細思路請見實現中的注釋。

#include

intmain()

// 當所有人都退出圈子時停止迴圈

// 最後退圈的人就是題中有乙個留在圈內的那個人

while

(k < n)}}

}//將最後退圈的人的號碼輸出

printf

("留下來的那個是%d號\n"

, lastone)

;}

ps e:\c++workspace> cd "e:\c++workspace\" ;

if($?);

if($?

)請輸入人數:8

留下來的那個是7號

ps e:\c++workspace> cd "e:\c++workspace\" ;

if($?);

if($?

)請輸入人數:20

留下來的那個是20號

ps e:\c++workspace> cd "e:\c++workspace\" ;

if($?);

if($?

)請輸入人數:17

留下來的那個是11號

C語言 N個人圍成一圈報數淘汰問題

一 問題描述 有17個人圍成一圈 編號為0 16 從第 0號的人開始從 1報數,凡報到 3的倍數的人離開圈子,然後再數下去,直到最後只剩下乙個人為止。問此人原來的位置是多少號?二 問題解決 1.定義陣列記錄每個編號的狀態 是否被淘汰 2.在未被淘汰的人中檢查是否數到3,若是,淘汰此人 3.繼續此過程...

C語言經典演算法100例(一)

c語言中有有許多經典的演算法,這些演算法都是許多人的智慧型結晶,也是程式設計中常用的演算法,這裡面包含了眾多演算法思想,掌握這些演算法,對於學習更高階的 更難的演算法都會有很大的幫助,會為自己的演算法學習打下堅實的基礎。接下來我們先來看10道 9 9乘法口訣表 void table99 printf...

對有n個人圍成的乙個圓圈進行按報數規則全部取數出列

設有n個人圍成乙個圓圈,現從第s個人開始報數,數到第m的人出列,然後從出列的下乙個人重新開始報數,數到第m個人再出列,如此反覆,直到所有的人全部出列為止。對於任意給定的n,s,m,求按出列次序得到的n個人員的序列。首先,建立乙個迴圈鍊錶,這裡預設頭指標中的data為1,即為n個人中的第乙個人 typ...