c语言 约瑟夫死亡游戏 简单链表

本文介绍了一个使用链表实现约瑟夫环问题的C语言程序。该程序首先创建一个包含指定数量节点的循环链表,然后按照给定步长移除节点直到达到指定的死亡人数。文中详细展示了链表的创建过程及约瑟夫环问题的解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct man)
#define NULL 0
struct man
{
 int mum;
 struct man *next;
};
struct man *creat(int n)
{
 struct man *head,*p1,*p2;
 if(n==0)
  head=NULL;
 if(n!=0)
 {
  head=p2=p1=(struct man *)malloc(LEN);
  head->mum=1;
  int i;
  i=2;
  do
  {
   p1=(struct man *)malloc(LEN);
   p1->mum=i;
   p2->next=p1;
   p2=p1;
   i++;
  }while(i<n);
  p2=p1;
  p1=(struct man *)malloc(LEN);
  p2->next=p1;
  p2->mum=n-1;
  p1->next=head;
  p1->mum=n;
 
 }
 return(head);
}
void ysf(int n,int s,int d,struct man *head)
{
 struct man *p1,*p2,*p3; 
 p2=p1=head;
 int m;
 float y;
 m=1;
 y=1;
 int i;
 int c=0;
 int q=1;
 for(i=1;i<=d;)
 {
  if((m/s)!=0)
  {
   if((m/s)==(y/s))
    {
     c++;
     printf("第%2d个死亡的人是%2d/n",c,p1->mum);
     p3=p1;
     p1=p1->next;
     free(p3);
     p2->next=p1;
     i++;
     q=1;
     m++;
     y++;
    
    }
  }
 
  p2=p1;
  p1=p1->next; 
  y++;  
  m++;
  q++;

 } 
}
int main()
{
 int n;
 int s;
 int d;
 struct man *head;
 printf("请输入总人数  n:");
 scanf("%d",&n);
 printf("请输入死亡位置s:");
 scanf("%d",&s);
 printf("请输入死亡人数d:");
 scanf("%d",&d);
 printf("/n");
 if(n<d) {printf("error/n"); return 1;}
 if(n<=0){printf("error/n"); return 1;}
 if(s<=0){printf("error/n"); return 1;}
 if(d<=0){printf("error/n"); return 1;}
 head=creat(n);
 ysf(n,s,d,head);
 return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值