首页 > 代码库 > 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实现之约舍夫问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。