n人圍成一圈報數問題

2021-07-24 18:59:42 字數 764 閱讀 8370

題目  

有n個人圍成一圈,順序排號。從第乙個人開始報數(從1到3報數),

凡報到3的人退出圈子,問最後留下的是原來第幾號的那位。

思路:假如是8人,則需要乙個陣列將8個人的從1到8依次記下每人位數,還需要乙個模擬報數口令的變數該變數最初為0,從1到2在到3,當該變數為3時,此時對應編號的人就要退出

那麼第一次報數,3號退出,6號退出,有乙個問題就是當這些人第一次報數到最後乙個人之後,肯定還有沒退出的人,還需要重新從開始沒有退出的人報數,我們可以將下標變數又從0開始自增,還必須檢測該元素是否為退出過的,如果不是才可以繼續報數,最後只要將陣列遍歷一遍,輸出最後的沒有退出的人**

#include main()

if(i==n-1)

i=-1;//作用是讓當報數到最後乙個人時,將下標賦值-1,這樣下次的i自增就是0,到達了從又從頭開始的目的

i++;

} for(i=0;i方法2:

#includemain()

{ int a[100],i,n,d,c;

printf("輸入人數:");

scanf("%d",&n);

c=0,d=n;//c從0到3模擬報數口令,d為隨著人退出而變化的人數

for (i=0;i1)//直到最後乙個人退出迴圈

{ for (i=0;i方法3

#include main()

{ int n,a[100],i,j=0,k=0;

scanf("%d",&n);

for (i=0;i

多人圍成一圈報數問題!

題目 摘自譚浩強的c語言 有n個人圍成一圈,順序排號。從第乙個人開始報數 從1到3報數 凡報到3的人退出圈子,問最後留下的是原來第幾號的那個人。解法思路 首先不要將思維侷限在一圈人,可以先將n個人看做一排,即作為乙個陣列,為這個陣列的每乙個元素 即人 編號,第0個人就編號1,以此類推。有了編號之後可...

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

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

n人圍成一圈,報數按順序輸出其報數的人編號

問題描述 有n個人圍成一圈,按順序從1到n編號。從第乙個人開始報數,報數3的人退出圈子,下乙個人從1開始重新報數,報數3的人退出圈子。如此迴圈,直到留下最後乙個人。問留下來的人的編號。include define max 50 void left num int a,int n1,int m1 in...