سلام ...ممنون مي شم اگر برنامه josephus رو كه توي c نوشته مي شه برام بنويسيد نياز خيلي خيلي فوري دارم البته خودم نوشتم ولي درست كار نمي كنه اينجا هم مي نوسم تا اگر تونستيد مشكلاتش رو رفع كنيد :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
struct joseph{
char name[21];
joseph *next;
};
void addq(joseph **list,char name[]);
void qremove(joseph **list,joseph *h);
int main()
{
joseph *list,*h;
long int i,n;
char name[21],str[5];
list=NULL;
clrscr();
printf("Enter n:");
gets(str);
while(1)
{
printf("Enter name of soldier:");
gets(name);
if(!name[0])
break;
addq(&list, name);
}
printf("the order of names:\n");
while(list!=list->next)
{
for (i=1;i<=n;i++)
{
h=list;
list=list->next;
}
printf("%s",list->name);
qremove(&list,h);
}
printf("\nthe soldier who escapes is:%s",list->name);
free(list);
getch();
return 0;
}
void addq(joseph **list,char name[])
{
joseph *help;
help=(joseph*)malloc(sizeof(struct joseph));
strcpy(help->name,name);
if ((*list)==NULL)
help->next=help ;
else
{
help->next=(*list)->next;
(*list)->next=help;
}
(*list)=help;
}
void qremove(joseph **list,joseph *h)
{
joseph *q;
if (*list==NULL||(*list==(*list)->next))
{
printf("you cannot remove from queue");
getch();
}
else{
q=(*list)->next;
h->next=q;
free(*list);
(*list)=q;
}
}