一道模拟题:改进的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\)中 ...
随机推荐
- 微软 .net 你更新这么快IDE vs2015 、语法糖 6.0、framework、‘吹得这么牛,然并用
好久没写吐槽文章了,因为无尽的加班,也因为工作的变迁,又因为最近看了微软又尼玛发布什么什么,好受不了. 今年大专毕业第八个年头了,人也到了30,真是光阴荏苒啊.最近这一两年发生了很多事,让我自己倍受打 ...
- Hdu 1443 Joseph
Joseph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- Magento开发常用方法
这里是我做Magento开发常用到的方法,现在总结出来,后续会把更多有用的方法总结出来. 1.直接操作数据库 查找数据:$read = Mage::getSingleton("core/re ...
- 推荐使用Wiz笔记发表博客
一直用Wiz笔记,平时随手记录一些东西,可以自动在多台电脑同步,还支持移动客户端,上下班路上用手机也能看.最近在整理之前工作的一些资料,并把自己觉得可以分享的内容发到博客园上.当然会先在Wiz笔记上编 ...
- 微信端应用 ionic实现texarea 自适应高度
最近公司项目,做微信端用到texarea 需要实现自适应高度的功能 当然自适应高度的方法很多网上找一大片,最直接的方式就是在使用到texarea的controller中添加js代码事件来实现,这中方式 ...
- [3] 智能指针std::auto_ptr
[1]std::auto_ptr 对于编译器来说,智能指针实质是一个栈对象,而并非指针类型. 智能指针通过构造函数获取堆内存的管理所有权,而在其生命期结束时,再通过析构函数释放由它所管理的堆内存. 所 ...
- python核心编程学习记录之映射和集合类型
字典是python里唯一的映射类型
- html5 Web Storage(localStorage(),sessionStorage())
Web Storage包括了两种存储方式:sessionStorage和localStorage sessionStorage 是会话级别的存储,这些数据只有在同一个会话中的页面才能访问并且当会话结束 ...
- java开发环境的主题色的变化
eclipse:Help->Install New Software->Work with:Update Site - http://eclipse-color-theme.github ...
- C中测试时间代码