首页 > 代码库 > 约瑟夫问题求解
约瑟夫问题求解
约瑟夫问题描述:
41个人坐一圈,轮流报数从1到3,数到3的人,自动出局,最后没出局的两人是谁?
算法思想:
①坐一圈 采用循环数组 i = i % LEN;
②有出局的和没出局的 采用个计数器 一个记录 在所有人的位置,
另一个记录 在未出局的人中的位置;
1 1 #include<stdio.h>
2 2 #define LEN 41
3 3 #define STEP 3
4 4 int main(){
5 5 int pos = 1,count=0,i=0;
6 6 int arr[LEN];
7 7 for(i=0;i<LEN;i++)arr[i]=0;
8 8 for(i=0;count < LEN - LEN % STEP;i++){ //i外层 在数组中的位置
9 9 if(0 == arr[i%LEN]){
10 10 if(3 == pos){ //pos 活着的人口中的数字
11 11 arr[i % LEN] = 1;
12 12 count++; //count 作为 死亡人数统计 确保 循环可以正常结束
13 13 pos = 0;
14 14 }
15 15 pos++;
16 16 }
17 17 }
18 18 for(i=0;i<LEN;i++)if(0 == arr[i])printf("%d\n",i+1);
19 19 return 0;
20 20 }
约瑟夫问题求解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。