S&Q

S&Q

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 代码截图

1233778-20180414225542809-936135359.png

2.1 PTA提交列表

1233778-20180414225635584-1411138073.png

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 代码截图

1233778-20180414234756721-1042989645.png
1233778-20180414234848171-669800616.png

2.2 PTA提交列表

1233778-20180414230915912-1497111366.png

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 代码截图

1233778-20180414213152630-1681084970.png
1233778-20180414213324955-1457840109.png

2.3 PTA提交列表

1233778-20180414225708570-406881728.png

3.截图本周题目集的PTA最后排名

3.1 栈PTA排名

1233778-20180413152715523-213699144.png

3.2 队列PTA排名

1233778-20180413152802403-671131391.png

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/
该代码利用栈求解.通过栈的后入先出删除前面的低于这座山(会被挡住)的山峰,并用队列的长度表示回头能看到的山峰数

posted on 2018-04-14 22:54 嗡嗡_嗡 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/wu98/p/8820672.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值