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


《一》問題描述:

        有17個人圍成一圈(編號為0~16),從第 0號的人開始從 1報數,

        凡報到 3的倍數的人離開圈子,然后再數下去,直到最后只剩下一個人為止。

        問此人原來的位置是多少號?

 

《二》問題解決:

       1.定義數組記錄每個編號的狀態(是否被淘汰);

       2.在未被淘汰的人中檢查是否數到3,若是,淘汰此人;

       3.繼續此過程至所有人被淘汰;

 

《三》示例代碼:

    

       

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdlib.h>
 3 #include <stdio.h>
 4 #include <math.h>
 5 #include <string.h>
 6 
 7 #define N 13
 8 
 9 struct MyStruct
10 {
11     int num;
12     int flag;
13 };
14 
15 typedef struct MyStruct people;
16 
17 int main()
18 {
19 
20     people a[N];
21     for (int i = 0; i < N; i++)
22     {
23         a[i].num = i;
24         a[i].flag = 1;
25     }
26 
27     for (int i = 0; i < N; i++)
28     {
29         printf("num=%3d,flag=%3d\n", a[i].num, a[i].flag);
30     }
31 
32     int count = 0;
33     int i = 0;
34     int index = 0;
35     while (count < N-1)
36     {
37         while (!a[index].flag)
38         {
39             index = (index + 1) % N;
40         }
41         i++;
42 
43         if (i % 3 == 0)
44         {
45             a[index].flag = 0;
46             count++;
47             i = 1;
48         }
49         index = (index + 1) % N;
50 
51     }
52     
53     printf("\n");
54     i = 0;
55     int flagnum;
56     while (i < N)
57     {
58         if (a[i].flag)
59         {
60             printf("i=%3d,num=%3d,flag=%3d\t該數為所求\n", i, a[i].num, a[i].flag);
61         }
62         else
63         {
64             printf("i=%3d,num=%3d,flag=%3d\n", i, a[i].num, a[i].flag);
65         }
66         i++;
67     }
68     printf("\n");
69 
70     system("pause");
71 }
View Code

 

 

 

 

 

     

     

       

 

 

 

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 n人圍成一圈報數 C語言 約瑟夫圈問題:N個人圍成一圈,從第一個人開始按順序報數並編號1,2,3,……N,然后開始從第一個人轉圈報數,凡是報到3的退出圈子。則剩下的最后一個人編號是多少。 C# 有N個人圍成一圈,第一個人從1開始報數,報到M的人出列,求依次出列的人的編號 報數問題:有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位 約瑟夫環問題:有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。 有n個人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位 有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。 有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。 有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。 【JAVA習題二十七】有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM