此题为小白书里数据结构基础关于线性表的题目

翻译请戳 http://luckycat.kshs.kh.edu.tw/

解题思路

当时直接用动态的双向链表模拟了。。。

但是用双向链表很纠结啊,如果你加入头结点之后的查找会变得很麻烦,

如果不加头结点的话,插入节点会很麻烦。。。

但已经写了就不想改了。。。如果你用静态链表实现亦可以,看个人喜好。

注意 如果有头结点,一开始从头结点数起,第一次删除后,以后的删除都要忽略头结点(跳过不计)。

代码:

#include<iostream>
#include<stdio.h>
using namespace std;
typedef struct node {int id;struct node *pre, *next;
}pesNode;
void Insert(pesNode *first, pesNode *s)
{pesNode *p = first;while(p->next != first) p = p->next;s->next = p->next;p->next->pre = s;p->next = s;s->pre = p;
}
void Delete(pesNode *p)
{p->pre->next = p->next;p->next->pre = p->pre;delete p;
}
int main()
{int n, k, m;while(scanf("%d%d%d", &n, &k, &m) && n!=0&&k!=0&&m!=0) {pesNode *first = new pesNode;first->id = 0;first->next = first; first->pre = first;for(int i=1; i<=n; i++) {pesNode *s = new pesNode;s->id = i;Insert(first, s);}pesNode *p, *q;p = first; q = first;int tot = n;while(tot) {int i = 0;while(i != k) {if(p->next != first){p=p->next;i++;}else p=p->next;}int j = 0;while(j != m) {if(q->pre != first){q=q->pre;j++;}else q=q->pre;}pesNode *tempP = p;pesNode *tempQ = q;if(p->pre == q){p = p->pre->pre;q = q->next->next;}else {p=p->pre;q = q->next;}if(tempP->id == tempQ->id) {if(tempP->next == first && tempP->pre == first) { printf("%3d\n", tempP->id);break; }else printf("%3d,", tempP->id);tot--;}else {if(tempP->pre==first && tempQ->next == first && tempP->next == tempQ|| tempP->next==first && tempQ->pre==first && tempQ->next == tempP){printf("%3d%3d\n", tempP->id, tempQ->id); break; }else printf("%3d%3d,", tempP->id, tempQ->id);tot -= 2;}if(tempP!=tempQ) {Delete(tempP);Delete(tempQ);}else Delete(tempP);}}
}

转载于:https://www.cnblogs.com/ZengWangli/p/5747711.html

uva133-救济金发放相关推荐

  1. 算法竞赛入门经典(第二版) | 例题4-3 救济金发放 (UVa133,The Dole Queue)

    提目(提交)链接→UVa-133 百度翻译→百度翻译 没使用过该网站的同学请猛戳这里→vJudge教程 分析: 最开始的固有思维是循环就用循环链表,其实完全可以把它看成一个大一点的周期类型题(一个大周 ...

  2. UVA-133 The Dole Queue 救济金发放

    一.题目 In a serious attempt to downsize (reduce) the dole queue, The New National Green Labour Rhinoce ...

  3. ACM题目:救济金发放

    思路: 1. 使用数组que记录在队伍中的人,数组索引范围是 1~n: 2. 用book标记离开队伍的人 3.用 left 记录队伍剩下的人数,left=0的时候,就可以结束循环: 3.分别从que[ ...

  4. 蓝桥杯 真题 救济金发放、分糖果、刽子手游戏

    题目 n(n<20)个人站成一圈,逆时针编号为1-n.有两个官员,A从1开始逆时针数,B从n开始顺时针数.在每一轮中,官员A数k个就停下来,官员B数m个就停下来(注意有可能两个官员停在同一个人上 ...

  5. 救济金发放(The Dole Queue)

    n(n<20)个人站成一圈,逆时针编号为1~n.有两个官员,A从1开始逆时针数,B从n开始顺时针数.每一轮中A数到k个就停下来,B数到m个就停下来(注意有可能两个官员停在同一个人身上).接下来被 ...

  6. 奇安信(2019笔试题)

    40道选择(40分) 2道编程 (60分) 1. 队尾幸运编号 时间限制:C/C++语言 1000MS:其他语言 3000 MS 内存限制:C/C++ 语言65536KB:其他语言 589824KB ...

  7. 约瑟夫环c语言出现段错误,算法竞赛入门经典 紫书 第四章

    一点小问题 关于判断素数的几点 //该函数有严重缺点: //不能用于n==1和n较大的情况 //在n接近int的最大值时: //若i=46340时,i*i=2147395600//若i=46341时, ...

  8. 4.4 竞赛题目选讲

    竞赛题目选讲 这里的题目可能和大家在做的实验项目有些不太一样,希望大家根据自己的需要阅读本章节. 4-2 刽子手游戏 (UVA 489) 书上的题面少了一些很重要的东西,真正的题面请点开这里 分析:根 ...

  9. 初学者acm的练习题指南

    上机练习题参考题 忘了在哪找的啦~~希望对大家有帮助呦 <!--[if !supportLists]-->1.    <!--[endif]-->Programming Bas ...

  10. 咖说 | 央行应该如何使用数字货币发放全民基本收入?

    " 收集一众行业大咖观点,探索区块链商业及应用.百家争鸣.百花齐放,说理.解密.预测和八卦,了解行业内幕,看咖说就够了! 投稿请联系 :tougao@conflux-chain.org 本文 ...

最新文章

  1. css高级教程第一章笔记
  2. ADO.NET Entity Framework Extensions 简单应用
  3. MySQL服务的启动与停止-使用图形界面工具
  4. ZOJ - 3228 Searching the String(AC自动机求不重复子串出现次数)
  5. 现代制造工程——考试复习01
  6. 1.6.4 分离原则: 策略同机制分离,接口同引擎分离
  7. django和mysql如何建模_Django如何设计数据模型
  8. 有一次面一非常想去的 飞鸽传书绿色版 公司
  9. 终于学会后空翻!历经多次NG,波士顿动力机器人再get新技能
  10. sqlserver2012安装教程
  11. 流加密,一次性密码本的原理,简介,事例以及攻击方式
  12. 保存网页为图片——滚动截取IE(WebBrowse)
  13. Django搭建个人博客之编写博客文章的Model模型
  14. linux 网卡绑定解绑,网卡绑定开机绑定,关机解绑
  15. 小学六年级数学教案:圆柱与圆锥
  16. 十二载征程犹未止,看今朝星光尽闪耀丨万字长文回顾2023数据技术嘉年华
  17. LDO稳压器详解(一)-参数概念
  18. iOS的音频解码详解
  19. flash特效原理 图片滑动放大效果 2
  20. Autodesk Maya 2019 安装

热门文章

  1. linux 引导原理 pdf,linux深度开发原理.pdf
  2. clickhouse条件函数
  3. RDD partitioner入门详解
  4. 告诉刚入行的兄弟们,钱是这么赚的!
  5. Mac 安装 MySQL
  6. ubuntu 虚拟机(转)
  7. Activity随笔
  8. Directionally Localized Anti-Aliasing
  9. KTable的设置单元格属性
  10. zz Makefile学习教程: 跟我一起写 Makefile