数据结构之 击鼓传花
来源:互联网 发布:java项目权限管理 编辑:程序博客网 时间:2024/04/26 07:41
////////2015/10/16/////////////
///////by XBW//////////////////
//////环境 vs2013//////////
这是我们的数据结构的一个作业题,一个小作业之所以上博客,是希望在此mark一下,祭奠我失去的两天时光,以此警醒我要读明白题目之后再做题;先看一下被自己坑了的题目;
HomeWeb BoardProblemSetStandingStatusStatistics
Problem B: 击鼓传花
Time Limit: 1 Sec Memory Limit: 2 MBSubmit: 1429 Solved: 497
[Submit][Status][Web Board]
Description
设有N个人围成一个圈,每人手里都握着一个令牌写明一个数字(随机生成的)。从第一个人开始玩“击鼓传花”游戏,第一个击的次数为其令牌上写明的数字数(假设为m1)。第m1个人出列。下次再从第m1+1个人开始新的“击鼓传花”击的次数也为其令牌上写明的次数,等于该次数的人出列。重复以上过程直到所有人都出列为止。
Input
输入第一行为测试数据组数。每组测试数据2行,第1行一个整数n(1<=n<=10000),代表人数,第2行有n个空格隔开的整数代表mi(1<=mi<=5000)。
Output
对每组测试数据输出2行,第1行为数据组数,第2行为所有人顺序出队的序列,格式见样例。
Sample Input
1
5
1 2 3 4 5
Sample Output
Case #1:
2 1 3 4
HINT
考察知识点:循环链表,时间复杂度O(sum{m}),空间复杂度O(n)
从1开始,传1次:1->2。2出列。
从3开始,传3次:3->4->5->1。1出列。
从3开始,传3次:3->4->5->3。3出列。
从4开始,传4次:4->5->4->5->4。4出列。
Append Code
#include <iostream>using namespace std;typedef struct LNode{int data;//玩家号码牌int caonima;//一时生气搞得变量,他就是记录玩家位置的struct LNode *next;}*LinkList;void CreatList(LinkList *L){*L = new LNode;(*L)->next = *L;(*L)->caonima = 1;}void InsertList(LinkList *L, int t)//给链表赋值{int num;int caonima = 1;LinkList p = *L, s;for (int i = 0; i < t; i++){cin >> num;s = new LNode;s->data = num;s->caonima = caonima++;s->next = p->next;p->next = s;if (p == *L)*L = s;p = p->next;}}void DestroyList(LinkList *L){LinkList q, p = (*L)->next; /* p指向头结点 */while (p != *L) /* 没到表尾 */{q = p->next;delete(p);p = q;}delete(*L);*L = NULL;}void ClearList(LinkList *L) /* 改变L */{ /* 初始条件:线性表L已存在。操作结果:将L重置为空表 */LinkList p, q;*L = (*L)->next; /* L指向头结点 */p = (*L)->next; /* p指向第一个结点 */while (p != *L) /* 没到表尾 */{q = p->next;delete(p);p = q;}(*L)->next = *L; /* 头结点指针域指向自身 */}int main(){int N;int Counts = 0;cin >> N;while (N--){cout << "Case #" << ++Counts << ":" << endl;LinkList L;LNode *p, *q, *s;CreatList(&L);p = L;q = L;int T;cin >> T;if (T == 0){cout << endl;continue;}InsertList(&L, T);L = p;T--;int first = 1;while (T--){p = p->next;if (p == L){p = p->next;}int con = p->data;for (int i = 0; i < con; i++){if (p->next == L){p = p->next;}if (con - i == 1){q = p;}p = p->next;}if (first){cout << p->caonima;//输出位置,而不是号码牌first = 0;}else{cout << " " << p->caonima;//同上}s = q->next;//删除指针q->next = s->next;delete(s);p = q;}cout << endl;ClearList(&L);DestroyList(&L);}}
心好痛
你们看了是什么感觉呢,
希望大家能简化一下程序,指出不必要的操作,或者更好的方法,谢谢大家了,以后还是读明白题再做吧
1 0
- 数据结构之 击鼓传花
- 动态规划之击鼓传花
- 动态规划之击鼓传花
- 数据结构(线性结构习题)Problem B: 击鼓传花
- 击鼓传花
- 题目:《击鼓传花》
- 击鼓传花
- 击鼓传花
- 击鼓传花
- 击鼓传花
- 击鼓传花
- coro学习-击鼓传花
- 动态规划:击鼓传花
- 击鼓传花(赛码网)
- ds 2.3 击鼓传花
- 动态规划:击鼓传花
- 动态规划-击鼓传花
- FOJ 1962 新击鼓传花游戏
- 文字
- Android Studio常用快捷键
- 009-数组-C语言笔记
- 浅谈HTTP中Get与Post的区别
- >/dev/null 2>&1
- 数据结构之 击鼓传花
- plsql 导入导出表、数据、序列、视图
- 史上最简单的Hibernate入门简介
- sql 语句
- 图片的二次采样
- 010-字符串-C语言笔记
- yii学习笔记_布局文
- 彻底弄懂最短路径问题
- 第1课 - 返回指定的内容