題目
有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...