uva133-救济金发放
此题为小白书里数据结构基础关于线性表的题目
翻译请戳 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-救济金发放相关推荐
- 算法竞赛入门经典(第二版) | 例题4-3 救济金发放 (UVa133,The Dole Queue)
提目(提交)链接→UVa-133 百度翻译→百度翻译 没使用过该网站的同学请猛戳这里→vJudge教程 分析: 最开始的固有思维是循环就用循环链表,其实完全可以把它看成一个大一点的周期类型题(一个大周 ...
- UVA-133 The Dole Queue 救济金发放
一.题目 In a serious attempt to downsize (reduce) the dole queue, The New National Green Labour Rhinoce ...
- ACM题目:救济金发放
思路: 1. 使用数组que记录在队伍中的人,数组索引范围是 1~n: 2. 用book标记离开队伍的人 3.用 left 记录队伍剩下的人数,left=0的时候,就可以结束循环: 3.分别从que[ ...
- 蓝桥杯 真题 救济金发放、分糖果、刽子手游戏
题目 n(n<20)个人站成一圈,逆时针编号为1-n.有两个官员,A从1开始逆时针数,B从n开始顺时针数.在每一轮中,官员A数k个就停下来,官员B数m个就停下来(注意有可能两个官员停在同一个人上 ...
- 救济金发放(The Dole Queue)
n(n<20)个人站成一圈,逆时针编号为1~n.有两个官员,A从1开始逆时针数,B从n开始顺时针数.每一轮中A数到k个就停下来,B数到m个就停下来(注意有可能两个官员停在同一个人身上).接下来被 ...
- 奇安信(2019笔试题)
40道选择(40分) 2道编程 (60分) 1. 队尾幸运编号 时间限制:C/C++语言 1000MS:其他语言 3000 MS 内存限制:C/C++ 语言65536KB:其他语言 589824KB ...
- 约瑟夫环c语言出现段错误,算法竞赛入门经典 紫书 第四章
一点小问题 关于判断素数的几点 //该函数有严重缺点: //不能用于n==1和n较大的情况 //在n接近int的最大值时: //若i=46340时,i*i=2147395600//若i=46341时, ...
- 4.4 竞赛题目选讲
竞赛题目选讲 这里的题目可能和大家在做的实验项目有些不太一样,希望大家根据自己的需要阅读本章节. 4-2 刽子手游戏 (UVA 489) 书上的题面少了一些很重要的东西,真正的题面请点开这里 分析:根 ...
- 初学者acm的练习题指南
上机练习题参考题 忘了在哪找的啦~~希望对大家有帮助呦 <!--[if !supportLists]-->1. <!--[endif]-->Programming Bas ...
- 咖说 | 央行应该如何使用数字货币发放全民基本收入?
" 收集一众行业大咖观点,探索区块链商业及应用.百家争鸣.百花齐放,说理.解密.预测和八卦,了解行业内幕,看咖说就够了! 投稿请联系 :tougao@conflux-chain.org 本文 ...
最新文章
- css高级教程第一章笔记
- ADO.NET Entity Framework Extensions 简单应用
- MySQL服务的启动与停止-使用图形界面工具
- ZOJ - 3228 Searching the String(AC自动机求不重复子串出现次数)
- 现代制造工程——考试复习01
- 1.6.4 分离原则: 策略同机制分离,接口同引擎分离
- django和mysql如何建模_Django如何设计数据模型
- 有一次面一非常想去的 飞鸽传书绿色版 公司
- 终于学会后空翻!历经多次NG,波士顿动力机器人再get新技能
- sqlserver2012安装教程
- 流加密,一次性密码本的原理,简介,事例以及攻击方式
- 保存网页为图片——滚动截取IE(WebBrowse)
- Django搭建个人博客之编写博客文章的Model模型
- linux 网卡绑定解绑,网卡绑定开机绑定,关机解绑
- 小学六年级数学教案:圆柱与圆锥
- 十二载征程犹未止,看今朝星光尽闪耀丨万字长文回顾2023数据技术嘉年华
- LDO稳压器详解(一)-参数概念
- iOS的音频解码详解
- flash特效原理 图片滑动放大效果 2
- Autodesk Maya 2019 安装