有意思的问题,不过这种报法不论有多少人,第一个报数的人好象都不会是最后留下的那个,那位大大可以编个程序验证一下啊
#include<stdio.h> #include<memory.h> #define MAX_SIZE 30 typedef struct { int number; int flag; }People ; People a[MAX_SIZE]; int main(void) { int i=0; int j=0;//j表示被投入大海的人数 memset(a,0,MAX_SIZE*sizeof(People));//清空数组 for(i=0;i<MAX_SIZE;i++) a[i].number=i+1;//初始化结构体数组 printf("开始扔人啦.\n"); while(j<=14)//这个大的循环是为了按照123的顺序将数到3的人投入大海中 { while(1) { if(a[i].flag==0) { i=(i+1)%MAX_SIZE; break; } else i=(i+1)%MAX_SIZE; } while(1) { if(a[i].flag==0) { i=(i+1)%MAX_SIZE; break; } else i=(i+1)%MAX_SIZE; } while(1) { if(a[i].flag==0) { a[i].flag=1; i=(i+1)%MAX_SIZE; j++; break; } else i=(i+1)%MAX_SIZE; } } printf("幸运者如下.\n"); for(i=0;i<30;i++) { if(a[i].flag==0) printf("\n%d\n",a[i].number); } return 0; }ps:等我用链表再写一个约瑟夫,我再上传上来哈,呵呵,大家一起加油哈