约瑟夫问题描述:
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 }
时间: 2024-08-28 01:06:32