数据结构,C语言版的编程问题
设有N个人围坐在一个圆桌周围,现从第S个人开始报数,数到第M的人出列,然后从出列的下一个人重新开始报数,数到M的人又出列,如此重复,直到所有的人全部出列为止。Joseph...
设有N个人围坐在一个圆桌周围,现从第S个人开始报数,数到第M的人出列,然后从出列的下一个人重新开始报数,数到M的人又出列,如此重复,直到所有的人全部出列为止。Josephus的问题是:对于给定的N,M,S,求出按出列次序得到的N个人员的顺序表。
展开
1个回答
2009-12-09
展开全部
#include <stdio.h>
#include <stdlib.h>
#define LENGTH 10
#define ANNOUNCER 4
int main(int argc, char **argv){
int array[LENGTH];
int len = LENGTH;
int i, j, left;
for(i = 0; i< LENGTH; i++){//marks the position that is available
array[i] = 1;
}
j = 0;
for(i = 0; i< LENGTH; i = (i+1)%10){//loop until len == 1
if(array[i] != 0){
j++;//counter
}
if(j==ANNOUNCER){//reached 4, out
array[i] = 0;//unmark
len--;
j = 0;
}
if(len == 1){
break;
}
}
for(i = 0;i<10; i++){
if(array[i] != 0){
printf("left: %d\n",i);
}
}
}
#include <stdlib.h>
#define LENGTH 10
#define ANNOUNCER 4
int main(int argc, char **argv){
int array[LENGTH];
int len = LENGTH;
int i, j, left;
for(i = 0; i< LENGTH; i++){//marks the position that is available
array[i] = 1;
}
j = 0;
for(i = 0; i< LENGTH; i = (i+1)%10){//loop until len == 1
if(array[i] != 0){
j++;//counter
}
if(j==ANNOUNCER){//reached 4, out
array[i] = 0;//unmark
len--;
j = 0;
}
if(len == 1){
break;
}
}
for(i = 0;i<10; i++){
if(array[i] != 0){
printf("left: %d\n",i);
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询