洛谷 || 约瑟夫问题
小Bob 小Bob Bob来啦
2020年10月12日 01:10 __ _ _ _ _

点击上方「 蓝字 」关注”程序员Bob”
每天与你不见不散!

每日一句,送给最珍贵的你:
学会适应不同的环境,与环境一起改变与否,将决定你开启一场怎样的人生!
## 题目描述
n 个人围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1 开始报数,数到m
的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。
## 输入格式
输入两个整数 n,m 。
## 输出格式
输出一行 n 个整数, 按顺 序输出每个出圈人的编号。
** **
输入输出样例
输入10 3输出3 6 9 2 7 1 8 5 10 4** 源代码: **
#include <stdio.h>#include <stdlib.h>
typedef struct Node { int data; struct Node *next;}ListNode;
typedef ListNode *LinkList;
LinkList InitList (int n,LinkList L);LinkList ListDelete(int n,int m,LinkList L);
int main() { LinkList L; int n,m; scanf("%d %d",&n, &m); L=InitList(n,L); L=ListDelete(n,m,L); //return 0;}
LinkList InitList (int n,LinkList L) { ListNode *p, *q; int i; L = (ListNode *) malloc(sizeof(ListNode)); q=L;//q为临时变量,将头节点赋值给q for (i = 1; i <= n; i++) { p = (ListNode *) malloc(sizeof(ListNode)); p->data =i;//初始化p的data q->next=p;//将q指向p的首地址 q=p;//p为尾结点,将p赋值给临时变量q } p->next=L->next;//使最后一个结点指向第一个结点,使之构成一个循环 return L;}
LinkList ListDelete(int n,int m,LinkList L){ int i,l; ListNode *p, *q; p=L; for(i=1;i<=n;i++){ for(l=1;l<m;l++){ p=p->next;//p是第l-1个(待删除项) } q=p->next; p->next=q->next; printf("%d ",q->data); free(q); L=p; } return L;}
运行结果:


**最后的话:****刷题要找自己的不足,然后去专攻。 ** ** ** ** 往期推荐: **
Navicat Premium 15 连接MySQL安装教程 2020-10-10
My SQL服务库下载安装走起! 2020-10-08
关于小编 2020-10-06
为你,千千万万遍.
关注 程序员Bob 公众号, 与你 一起终 生学习

一键三连,就差你了
预览时标签不可点
阅读
__
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小Bob的博客!











