首页 > 编程语言 >算法题:约瑟夫环问题

算法题:约瑟夫环问题

时间:2023-11-13 16:26:03浏览次数:42  
标签:blog relevant int cmd 链表 next 问题 算法 约瑟夫

原题:

N个人围成一圈顺序编号,从1号开始按1、2、3…顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。 请按退出顺序输出每个退出人的原序号。

输入格式:

输入只有一行,包括一个整数N(1<=N<=3000)及一个整数p(1<=p<=5000)。
输出格式:
按退出顺序输出每个退出人的原序号,数据间以一个空格分隔,但行尾无空格。

输入样例:
7 3
输出样例:
3 6 2 7 5 1 4

实现

使用单向循环链表解决这个问题。

#include <stdio.h>
#include <stdlib.h>

typedef struct node{
   int date;
   struct node *next;
}node,*cmd;     //创建链表

cmd create();   //创建函数
void print(cmd L);  //输出函数
int a,b;        //一共a个数,报b则出链

int main()
{
   cmd L;
   scanf("%d %d",&a,&b);
   L=create();
   print(L);
   return 0;
}

cmd create()   // 创建含有 1 2 3....a个数的链表
{
   int i;
   cmd L,p,s;
   L=(cmd)malloc(sizeof(node));
   p=L;
   p->date=1;
   for(i=2;i<=a;i++){   
   s=(cmd)malloc(sizeof(node));
   s->date=i;
   p->next=s;
   p=s;
 }
    p->next=L;    //循环链表
    return L;
}

void print(cmd L)
{
   int i=0,j,r[1000];   //数组存放出列数字
   cmd q,p;      //删除链结点所需
   p=L;           
   while(i<a){  
      for(j=1;j<(b-1);j++){   //将目标停在要报b
        p=p->next;}              的前一个结点
      q=p->next;         //做删除结点
      r[i]=q->date;      //出链的结点date保存到
      p->next=q->next;     数组里
      free(q);
      p=p->next;
      i++;
 }
 for(j=0;j<=a-1;j++)
  printf("%d ",r[j]);
}

参考

https://blog.csdn.net/qq_44797278/article/details/105616189?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-7-105616189-blog-122014339.235^v38^pc_relevant_anti_t3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-7-105616189-blog-122014339.235^v38^pc_relevant_anti_t3&utm_relevant_index=12

标签:blog,relevant,int,cmd,链表,next,问题,算法,约瑟夫
From: https://www.cnblogs.com/Higgerw/p/17829401.html

相关文章

  • 文心一言 VS 讯飞星火 VS chatgpt (134)-- 算法导论11.2 6题
    六、用go语言,假设将n个关键字存储到一个大小为m且通过链接法解决冲突的散列表中,同时已知每条链的长度,包括其中最长链的长度L,请描述从散列表的所有关键字中均匀随机地选择某一元素并在O(L·(1+1/a))的期望时间内返回该关键字的过程。文心一言,代码不能运行:在这个问题中,我们需......
  • JavaSE day06【排序查找算法,Map集合,集合的嵌套,斗地主案例】测评题
    选择题题目1(多选):下列关于TreeSet集合排序的原理正确的是()选项:​ A.排序方法如果返回的是小于0,代表的是当前元素较小,需要存放在左边​ B.排序方法如果返回的是大于0,代表的是当前元素较大,需要存放在右边​ C.排序此方法如果返回的是0,代表的是当前元......
  • 【1111算法题】蓝桥杯 c++(一)第一二题
    【1111算法题】第一题双十一的祈祷【算法赛】题目双十—,不仅是购物狂欢节,更有"光棍节"之称。这源于11:11由四个1构成,象征着单身。作为大学生的小蓝也想经历甜甜的校园恋爱,于是他找到了爱神丘比特,向他祈祷能为自己带来—段邂逅。丘比特是乐于助人的,他承诺小蓝只要回答出一个简......
  • JDK11->JDK17问题记录一(又jenkins使用问题记录一)
    背景:springboot项目jdk版本从11升级至17,本地打包编译OK,将代码提交至gerrit仓库时触发编译报错,错误如下:09:29:02[ERROR]Failedtoexecutegoalorg.apache.maven.plugins:maven-compiler-plugin:3.11.0:compile(default-compile)onprojectXXX:Fatalerrorcompiling:inva......
  • 磁盘的访问问题
    1、例题一某磁盘有100个磁道,磁头从一个磁道移至另一个磁道需要6ms。文件在磁盘上非连续存放,逻辑上相邻数据块的平均距离为10个磁道,每块的旋转延迟时间及传输时间分别为100ms和20ms,则读取一个100块的文件需要()ms。相关公式:读取时间=(寻道时间+旋转延迟时间+传输时间)*文件数量即,答......
  • oracle aud$造成system爆满问题
    我的数据库并没有开启对象审计,只有一些语句和权限的审计selectcount(*),usernamefromdba_audit_trailgroupbyusername;388"LIONIRPT"101062"YGLCUSR"57"APP_USR"2612712"PROM_MONITOR"1010"WALLET"4078"......
  • IDEA新建SpringBoot项目突然报错问题的解决
    问题描述在我使用IDEA新建SpringBoot项目时,突然出现这个错误:之前也是一直这么新建项目,这次突然出现这样的错误,哎呦,我真服啦~问题解决就是说吧,在我看了网上解决问题的教程之后,发现都没有问题,然后我就不死心地又试了试,发现就成功创建了,具体怎么解决的,我确实是不太清楚了。......
  • 解决composer报错curl error 60问题
    今天安装Thinkphp框架验证码扩展composerrequiretopthink/think-captcha时报错curlerror60whiledownloading https://xxx.com SSLcertificateproblem:certificatehasexpired,这个问题说的是CA证书过期了curlerror60whiledownloadinghttps://packagist.phpcomposer......
  • 问题:类文件具有错误的版本 61.0, 应为 52.0
    1.问题在配置SpringBoot项目时,使用了SpringBoot3,jdk版本为jdk1.8,报错:java:无法访问org.springframework.boot.SpringApplication错误的类文件:/G:/tools/Maven/maven-repository/org/springframework/boot/spring-boot/3.1.2/spring-boot-3.1.2.jar!/org/springframework......
  • 问题解答:SAP OData V2 和 V4 里针对日期类型的字段进行过滤操作(filter)的正确语法试
    我的知识星球里有朋友咨询一个问题:我测试了一个S/4HANAcloud的purchaseorder的API,这个是ODATAV4格式的。在对CreationDate做filter后运行有报错Invalidparametertypeusedwithfunction'eq'.对datetime字段做filter,一直搞不清楚格式。请帮忙看一下。本文就安排这......