队列的应用(如 排队面试、操作系统作业管理、约瑟夫问题)、栈应用(如迷宫问题、表达式求值)、树的判断、….
【约瑟夫问题】(重庆市第二届程序设计大赛题目)
问题描述:
N个教徒和N个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是他们想了一个办法:2N个人围成一圈,从第一个人开始依次循环报数,每数到第9个人就将他扔进大海,如此循环直到只剩下N个人为止。问怎样的站法,才能使得每次投入大海的都是非教徒。
输入:
输入文件由一行构成,就是N的值
输出:
输出文件是一行字符串,字符串由N个'@'字符(代表教徒)和N个'+'字符(代表非教徒)排列组成。该排列使得按照提述方法每次投入大海的都是非教徒。
输入样本:
15
输出样本:
@@@@+++++@@+@@@+@++@@+++@++@@+
【变形:】指定起点、规定报数方向、限定出列个数、变换步长值、两个方向同时报数
///
【选拔志愿者】(队列应用 重庆理工大学第四届大学生程序设计大赛试题 第5题)
重庆理工大学要选拔一批志愿者参加一项重要的活动。
参加志愿者选拔的同学们排队接受面试官们的面试。参加面试的同学们按照先来先面试并且先结束的原则接受面试官们的考查。
面试中每个人的人品是主要考查对象之一。(提高人品的方法有扶老奶奶过街,不闯红灯等)
作为主面试官的John想知道当前正在接受面试的同学队伍中人品值最高的是多少。于是他请你帮忙编写一个程序来计算。
【输入】输入文件名“selection.in”
输入数据第一行为一整数T,表示有T组输入数据。
每组数据第一行为”START”,表示面试开始
接下来的数据中有三种情况:
| 输入 | 含义 |
C NAME RP_VALUE | 名字为NAME的人品值为RP_VALUE的同学加入面试队伍。(名字长度不大于5,0 <= RP_VALUE <= 1,000,000,000) | |
| G | 排在面试队伍最前面的同学面试结束离开考场。 |
| Q | 主面试官John想知道当前正在接受面试的队伍中人品最高的值是多少。 |
最后一行为”END”,表示所有的面试结束,面试的同学们可以依次离开了。
所有参加面试的同学总人数不超过1,000,000
【输出】输出文件名“estdout.pc2”
对于每个询问Q,输出当前正在接受面试的队伍中人品最高的值,如果当前没有人正在接受面试则输出-1。
程序运行后结果示例:
【样例输入】
2
START
C Tiny 1000000000
C Lina 0
Q
G
Q
END
START
Q
C ccQ 200
C cxw 100
Q
G
Q
C wzc 500
Q
END
【样例输出】
1000000000
0
-1
200
100
500
//
【卡片游戏】(队列应用)
桌上一叠牌,从第1张开始从上往下依次编号为1~n。 当至少还剩2张牌时进行以下动作:扔掉顶上的第1张牌,然后把新的第1张牌放到整叠牌的最后。
输入n,输出每次扔掉的牌,以及最后剩下的牌。
【样例输入】
7
【样例输出】
1 3 5 7 4 2 6
【表达式求值】