首页 > 代码库 > C实现之约舍夫问题

C实现之约舍夫问题

 1 /* 2  3 约舍夫问题: 4 M个人围成圈,相邻相继编号1-M; 5 从1号人开始1号报数; 6 如果所报数为m,则撤出圆圈队伍。相邻的下一位报数者从1开始。 7 直至剩下最后一位,求其是第几位。 8  9 */10 11 # include<stdio.h>12 13 void main(){14     int M = 0; int sum = 0; int m = 0;  int tmp = 0; int Num = 0;15     printf("Input the number(<1000) of people:\n");16     wscanf_s(L"%d", &M);17     printf("Input the number that people would say:\n");18     wscanf_s(L"%d", &m);19     int k [1000];20     for(int j = 0; j <1000; j++){21         k[j] = 1;22     }                                         //init k[]23     while(Num!=M-1)24     {25       printf("The %d loop\n",m);26 27       for (int i = 0; i < M; i++){        28         if (k[i] == 1)29         {30             sum++;31             if (sum % m == 0)32             {33                 k[i] = 0; printf("Remove %d\n", i+1); Num++;           //The people that ID is i+1 remove.  add 1. 34                 35             }36          }37         if (Num == M-1)                                               //The rest of people is one. Out of the loop.38             break;39       }    40     }41     42     for (int j = 0; j < M; j++){43         if (k[j]==1)44         printf("The last people ID is %d", j+1);45 46     }47     system("pause");48 }

 

C实现之约舍夫问题