您的位置:首页 > 编程语言 > C语言/C++

约瑟夫环形算法 用c语言实现

2014-03-22 18:06 399 查看
算法的大致要求是:30个人组成一个环,从第一个人开始查数,查到第九个就拉去去枪毙一分钟,然后从下一个开始查数,每查到9就拉出去枪毙一分钟,直到枪毙完第15个人。

c语言实现如下:

#include "stdio.h"

void main(){

int array_list[30];

int i;

int calNum=0;

 int total=0;

 int index=-1;

for(i=0;i<30;i++){

array_list[i]=1;

}

while(1){

index++;

index%=30;

if(array_list[index]==1){

 calNum++;

}

if(calNum==9){

array_list[index]=0;

total++;

calNum=0;

printf("%3d",(index+1));

}

if(total==15){

break;

}

}

}

这个是用数组实现的,下面是用链表实现的:

#include "stdio.h"

#include "stdlib.h"

typedef struct LNode{

int data;

struct LNode *next;

}LNode,*LinkList;

LinkList p,q,m,s,L;

int i,j,k,count=0;

void initLinkList(LinkList L){

//初始化为单链循环

L=(LinkList)malloc(sizeof(LNode));

L->data=1;

L->next=L;

//使用尾插法创建循环单链表

p=L;

for(i=1;i<=29;i++){

s=(LinkList)malloc(sizeof(LNode));

s->data=i+1;

s->next=p->next;

p->next=s;

p=s;

}

q=p->next;

j=0;

while(1){

while(j<8){

q=q->next;

      j++;

}

if(j==8){

m=q->next;

q->next=m->next;

k=m->data;

printf("%d\n",k-1);

free(m);

j=0;

    count++;

}

if(count==15){break;}

}

}

void main(){

initLinkList(&L);

}

修改完成。如有不妥,请您指教。

 

 

 

 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐