数据结构练习:约瑟夫问题——循环链表的建立与使用
1.约瑟夫问题
描述:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。
输入:输入包含两个整数,第一个是n,第二个是m (0 < m,n <=300)。
输出:输出包含一行,即最后猴王的编号。
样例输入
12 4
样例输出
1
#include<stdio.h>
#include<stdlib.h> //存放malloc,calloc,realloc,free函数
using namespace std;
typedef int ElemType;
typedef struct DNode //结点类型
{
int data; //数据域
struct DNode *next; //指针域
}DNode; //DNode为结构体类型的变量名。
int main()
{
DNode *L,*r,*s,*p;
int i,n,k;
scanf("%d%d",&n,&k);
L = (DNode *)malloc(sizeof(DNode));
r = L;
for(i = 1; i <= n; i++) //尾插法建立链表,插入数据
{
s = (DNode *)malloc(sizeof(DNode));
s->data = i;
r->next = s;
r = s;
}
p = L->next;
s->next = p; //连接首尾元素,使链表成环。
free(L); // 释放头结点
while(p->next != p)
{
for(i = 1; i< k-1; i++)
{
p = p->next;
}
p->next = p->next->next; //将第k只猴子淘汰
p = p->next;
}
printf("%d\n",p->data);
return 0;
}
- 练习使用链表数据结构解决一件小问题
- 企业级数据结构-循环链表(约瑟夫问题)
- 链表-使用循环链表模拟约瑟夫问题
- 【数据结构和算法分析】循环链表及约瑟夫问题
- 数据结构学习笔记(二) 链表之用循环链表解决约瑟夫问题
- 数据结构学习中的简单问题(二):用循环链表求解简单约瑟夫问题
- queue队列的建立及使用,约瑟夫问题C/C++的解决
- 约瑟夫问题-循环链表
- 分别使用静态数组与动态数组建立一个区域 - 回复 "老A123" 的问题
- [1197]约瑟夫问题 (循环链表)SDUT
- ActiveReport 使用心得(二):建立报表文件及中文显示的问题(轉)
- 基于循环链表的约瑟夫问题
- 数据结构与算法问题 二叉树的建立与遍历(含非递归)
- 练习使用Java的BigInteger解决矩阵翻硬币问题
- POJ 3750 小孩报数问题(模拟/数据结构—循环链表)
- C语言数据结构练习——停车场管理系统(使用栈和队列)(草稿的草稿)
- 数据结构 练习 19-活动选择问题的实现(动态规划 和 贪心)
- ytu 2231: 交集问题(线性表)(数据结构,链表练习)
- 数据结构学习18——约瑟夫问题
- 约瑟夫问题(循环链表)