c语言约瑟夫问题
发布时间: 2025-09-20 05:01:52
‘壹’ 约瑟夫问题c语言实现代码
测试结果:
总人数n=9,报数m=2.
2->4->6->8->1->5->9->7->3
#include<stdio.h>
#include<stdlib.h>
typedefstructnode
{
intdata;
structnode*next;
}node;
typedefnode*Linklist;
//原代码voidCreatLinklist(Linklist*L,intn)
LinklistCreatLinklist(Linklist*L,intn)
{
Linklistp,s;
*L=(Linklist)malloc(sizeof(node));
(*L)->next=NULL;
inti=1;
p=*L;//增加这个语句,让p指向当前结点
if(n!=0)
{
//原代码while(i<=41)
while(i<=n)
{
s=(Linklist)malloc(sizeof(node));
s->data=i++;
p->next=s;
p=s;
}
s->next=(*L)->next;//将笑卖链表循环起来;
}
free(*L);//释放头结点;
returns->next;//返回第一个结点的值;
}
intmain()
{
intn=41;//9
intm=3;//2
inti;
LinklistL;
printf("总人数n=%d,报数m=%d. ",n,m);
//原代码Linklist*p=CreatLinklist(Linklist*L,intn);
Linklistp=CreatLinklist(&L,n);
Linklisttemp;
早升笑m%=n;
while(p!=p->next)
{
for(i=1;i<m-1;i++)
{
陆含p=p->next;
}
printf("%d->",p->next->data);
temp=p->next;
p->next=temp->next;
free(temp);
p=p->next;
}
printf("%d",p->data);
return0;
}
‘贰’ C语言,编了一个程序解决约瑟夫环问题(数组模拟1代表有人,0代表走了)下面的代码对吗
#include<stdio.h>
#defineN10
intmain()
{
inta[N];
inti,people=N,n=0;
for(i=0;i<N;i++)
a[i]=1;
i=0;
while(people>0)
{
if(a[i]==1)//非0的才统计
n++;
if(n==3)
{
a[i]=0;
people--;
printf("第%d个人离开 ",i+1);
n=0;
}
i++;
if(i==N)
i=0;
}
return0;
}
热点内容