1.学习总结
2.PTA实验作业
2.1 题目 : 报数游戏
2.1 解题思路
输入 n , m //总人数和退圈数
if m>n
Error
结束程序
end
定义队列 Numoff , 将n个人入队
int i= 1 //报数
while Numoff.size()!=0 do
if( i%=m )
then 将队首放到队尾
else 输出本轮退圈的人的编号 , Numoff.pop()
end
i++
end
2.1 代码截图
2.1 PTA提交列表
2.2 题目 : 列车厢调度
2.2 设计思路
定义栈S3储存3号轨道
定义队列S1
while S1.size() do
if 3号轨道最外面的车厢符合进道顺序
将其移向2号轨道
continue
end
if 1号轨道最外面的车厢符合进道顺序
then 将其移向2号轨道
else 将其移向3号轨道
end
end
while S3.size() do
if 3号轨道最外面的车厢符合进道顺序
then 将其移向2号轨道
else Error , 结束程序
end
end
2.2 代码截图
2.2 PTA提交列表
2.3 题目 : 银行排队问题之单队列多窗口加VIP服务
2.3 解题思路
定义结构体Bank存放客户信息
定义栈All存放所有客户 , VIP额外存放vip客户
输入n //客户总数
for i=1 to n do
输入客户i的信息,All.push
如果客户i是vip
VIP.push
end
while !All.empty() do
先判断是否有vip可进入vip窗口
有则将该vip出队,改变vip窗口空闲时间
continue
如果All.front()是vip && All的队首和VIP的队首不是同一个人
All.pop() //该客户之前已经出队
continue
for win=0 to sum-1 do //遍历窗口
如果该窗口是vip窗口,且此时也有vip在等待
continue //让位
如果win号窗口空闲
进入该窗口 , break
如果该窗口等待时间最短
标记该窗口
end
if win==sum //完全遍历,没有发现空闲窗口
进入标记的窗口
end
2.3 代码截图
2.3 PTA提交列表
3.截图本周题目集的PTA最后排名
3.1 栈PTA排名
3.2 队列PTA排名
3.3我的总分: 340
4.阅读代码
题目 :
Rocky山脉有n个山峰,,从西向东依次编号为1, 2, 3, ……, n。编号为i的山峰高度为hi。小修从西往东登山。
每到一座山峰,她就回头观望。在第i座山峰,她记录下自己回头能看到的山峰数si。
小修把所有的si加起来得到S作为她此次旅行快乐值。你能计算出小修的快乐值吗?
代码 :
#include<bits/stdc++.h>
using namespace std;
int main(){
stack <int> h;
int n , val = 0 ;
cin >> n;
while( n-- ){
int hi;
cin >> hi ;
val += h.size();
while( h.size() && h.top() < hi )
h.pop();
h.push( hi );
}
cout << val << endl;
return 0;
}
出处 : http://www.codevs.cn/problem/1531/
该代码利用栈求解.通过栈的后入先出删除前面的低于这座山(会被挡住)的山峰,并用队列的长度表示回头能看到的山峰数