一道模拟题:改进的Joseph环
题目:改进的Joseph环。一圈人报数,报数上限依次为3,7,11,19,循环进行,直到所有人出列完毕。
思路:双向循环链表模拟。
代码:
#include <cstdio>
#include <cstdlib> #define N 20 typedef struct node
{
int id;
struct node *next;
struct node *pre;
}Node, *pNode; //双向循环链表的构建
pNode RingConstruct (int n)
{
int i;
pNode head, p, q;
head = (pNode)malloc(sizeof(Node));
head->id = ;
p = head;
for (i = ; i <= n; i++)
{
q = (pNode)malloc(sizeof(Node));
q->id = i;
p->next = q;
q->pre = p;
p = q;
}
p->next = head;
head->pre = p;
return head;
} //传入报数的次数序号,返回此次报数的上限值
int boundMachine (int order)
{
int boundList[] = {, , , };
return boundList[(order - )%];
} //first为每次报数的第一人,bound为此次报数的上限,返回此次报数的应出列者
pNode count (pNode first, int bound)
{
while (--bound)
{
first = first->next;
}
return first;
} //将currentNode从环中删除,并返回被删除节点的下一节点
pNode removeNode (pNode currentNode)
{
pNode first = currentNode->next;
if (first != currentNode)
{
currentNode->pre->next = first;
first->pre = currentNode->pre;
}
printf("%d ", currentNode->id);
free(currentNode);
return first;
} int main (int argc, char *argv)
{
pNode first, toRemove;
int i;
first = RingConstruct(N);
for (i = ; i <= N; i++)
{
toRemove = count(first, boundMachine(i));
first = removeNode(toRemove);
}
return ;
}
当N为20时,出列顺序是:
一道模拟题:改进的Joseph环的更多相关文章
- Codeforces Round #442 (Div. 2) B题【一道模拟题QAQ】
B. Nikita and string One day Nikita found the string containing letters "a" and "b&qu ...
- ZOJ1111:Poker Hands(模拟题)
A poker deck contains 52 cards - each card has a suit which is one of clubs, diamonds, hearts, or sp ...
- POJ 3923 Ugly Windows(——考察思维缜密性的模拟题)
题目链接: http://poj.org/problem?id=3923 题意描述: 输入一个n*m的屏幕 该屏幕内有至少一个对话框(每个对话框都有对应的字母表示) 判断并输出该屏幕内处于最表层的对话 ...
- poj 1888 Crossword Answers 模拟题
Crossword Answers Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 869 Accepted: 405 D ...
- 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】
目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...
- 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中
题目名称 正确答案 序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer. ...
- ACdreamoj(1105)模拟题
题意:射一次激光最多能够攻击到几个敌人(因为激光非常强大,能够在击中敌人后穿过它,而瑶瑶自己的坦克因为有特殊装置,所以不会被激光击中.激光也会直接穿过它) . 表示此处为空地 * 表示此处为障碍(激光 ...
- POJ 1008 简单模拟题
e.... 虽然这是一道灰常简单的模拟题.但是米做的时候没有读懂第二个日历的计时方法.然后捏.敲完之后华丽的WA了进一个点.坑点就在一年的最后一天你是该输出本年的.e ...但是我好想并没有..看di ...
- NOIP模拟题汇总(加厚版)
\(NOIP\)模拟题汇总(加厚版) T1 string 描述 有一个仅由 '0' 和 '1' 组成的字符串 \(A\),可以对其执行下列两个操作: 删除 \(A\)中的第一个字符: 若 \(A\)中 ...
随机推荐
- HTML5 UI框架Kendo UI Web中如何实现Grid网格控件本地化
Kendo UI Web包含数百个创建HTML5 web app的必备元素,包括UI组件.数据源.验证.一个MVVM框架.主题.模板等. 为了使得产品可以符合不同市场的本地化需求和语言,Kendo U ...
- oracle 金额格式化
一般金额要显示成 XXX,XXX,XXX.XX的格式,可以这样做: to_char(column, 'FM999,999,999,990.00')
- shiro 从入门到放弃
Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大 ...
- Bootstrapper.cs
using System.Windows; using Microsoft.Practices.Prism.Modularity; using Microsoft.Practices.Prism.Un ...
- java正则表达式的使用
姿势: Pattern pattern = Pattern.compile("^Java.*");Matcher matcher = pattern.matcher("J ...
- (6) 深入理解Java Class文件格式(五)
前情回顾 本专栏的前几篇博文, 对class文件中的常量池进行了详细的解释. 前文讲解了常量池中的7种数据项, 它们分别是: CONSTANT_Utf8_info CONSTANT_NameAndTy ...
- Python正则表达式学习摘要及资料
摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2 ...
- Python3基础 reverse 将列表倒序排列
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- 微信小程序-视图
数据绑定 <!--wxml--> <view> {{message}} </view> // page.js Page({ data: { message: 'He ...
- Linux基本操作1 - 设备操作
Linux开发的过程中,肯定会使用到很多设备,所以对设备的挂载卸载是一个很基本的操作. Linux对设备的默认定义如下: 一.Linux中的硬件设备号 设 备 设 备 号 ...