博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
博客作业03--栈和队列
阅读量:5779 次
发布时间:2019-06-18

本文共 2966 字,大约阅读时间需要 9 分钟。

1.学习总结(2分)

1233242-20180417223252712-2114526027.png

2.PTA实验作业(4分)

注意:本次及以后的作业代码均需提交到Git仓库进行保存与未来的检查,并在学习总结小节截图你的提交记录。请立刻规划好存放你代码的目录结构,每次写完一题提交一次。具体提交方式请参见本周学习总结。

具体书写内容及格式如下:

2.1 题目1:7-1 jmu-字符串是否对称

2.1.1 伪代码描述

1.定义栈变量S,字符变量ch,数组a【】存放字符串;2.输入字符串到数组a;3.字符串入栈(入栈函数)           定义循环变量i;             for  i=0  to  a【i】!=‘\0’;           将数组中的元素入栈到栈中;            end for;         将栈的长度定义为数组的长度;4.比较数组和栈的字符串是否相等(比较函数)         定义循环变量 i,flag=0;            for  i=0 to  栈的长度;            如果数组和栈元素不同                 输出no;flag=1;退出;           否则                  指针top--;          end for;         如果flag=0;说明没有不同的元素,输出yes;

2.1.2 代码截图

1233242-20180414092457952-1243033414.png

1233242-20180414092512760-1986671620.png

2.1.3 PTA提交列表说明。

1233242-20180414092716517-2090171458.png

1233242-20180414092723268-276085456.png

  • 一开始在输入字符到数组时,我用的是while,所以一直段错误,虽然 不知道为什么,但是后来换成gets输入的时候就不会段错误了。
  • 后来一直部分正确,是在比较函数的时候我一开始当判断出no的时候就break,没有用flag判断,后来加了flag判断就正确了。

2.2 7-1 jmu-报数游戏

2.2.1伪代码描述

1.定义变量m,n;2.输入n,m;如果m>n,输入错误,cout<<“error”,退出;3.(按题意输出函数)      定义循环变量i,j,k=1,e存放数据;     queue
Q; for i=0 to n; 将i+1值进队列; end for; while(k

2.2.2代码截图

1233242-20180414095013752-1664318229.png

2.2.3 PTA提交列表说明。

1233242-20180414095252864-442108898.png

  • 一开始,不知道用queue,所以打的很辛苦也有很多错误,后来用queue就没有什么错误了。

2.1 题目3:7-2 银行业务队列简单模拟

2.3.1伪代码描述

1.定义数据总数变量count,循环变量i,k=1,数据变量number,判断变量flag=0;2.输入count;  queue
Q1,Q2;3.使用for循环,依次输入数据进队列Q1;4.使用for循环,依次将Q1中的偶元素分到Q2中;5.while(k

2.3.2代码截图

1233242-20180414102452058-2076993560.png

1233242-20180414102458167-1651546021.png

1233242-20180414102505409-1445556719.png

2.3.3PTA提交列表截图

1233242-20180414102605807-1686268581.png

  • 一开始是flag=0写成flag==0;部分正确;
  • 第二个是输出最后一个元素的时候,Q1有剩只会剩一个元素,但是Q2却不一定,所以在while循环结束后的输出,对于Q2的写法不同于Q1,调试后找到错误并改正;

3.1 栈PTA排名

1233242-20180414212247924-710509696.png

3.2 队列PTA排名

1233242-20180414212101927-1059905399.png

3.3 我的总分:

155

4. 阅读代码(必做,1分)

#include 
#include
#include
using namespace std;struct node{ int t, p;//到达时间,处理时间 };int main(){ int n; cin>>n; queue
q; int i; for(i = 0; i < n; i++){// 将输入的数入队列 node tmp; cin>>tmp.t>>tmp.p; if(tmp.p > 60) tmp.p = 60;//根据题意,最大处理时间为60 q.push(tmp); } int k; cin>>k;//k个窗口 int win[15] = {0}, num[15] = {0};//完成时间,窗口人数 int wait = 0, maxn = 0, sum = 0;//单次等待时间,最长等待时间,总的等待时间 while(!q.empty()){ int flag = 0; int minn = 9999, imin = 0;//最快完成时间,最快完成时间的下标 for(i = 0; i < k; i++) {//遍历k个窗口 if(win[i] <= q.front().t) { win[i] = q.front().t + q.front().p;// 更新完成这个窗口完成的时间 num[i]++;//窗口人数加一 flag = 1;// 标记一下,代表不需要等待 q.pop();// 队列首位除去 break; } if(minn > win[i]){//如果需要等待,就记录各个窗口里最快完成的那个窗口的完成时间,和下标 minn = win[i]; imin = i; } } if(flag == 0){// 需要等待 wait = win[imin] - q.front().t;// 等待的时间,最快完成的时间减去队列第一个人到达的时间 win[imin] += q.front().p; if(maxn < wait) maxn = wait; sum += wait; num[imin]++; q.pop(); } } int last = win[0]; for(i = 0; i < k; i++){ if(win[i] > last) last = win[i];// 求最大完成时间 } printf("%.1lf %d %d\n", sum * 1.0 / n * 1.0, maxn, last);//输出 for(i = 0; i < k; i++){ cout<
  • 这道题是网搜的银行排队单队列多窗口

5. 代码Git提交记录截图

1233242-20180414221212598-2037380068.png

1233242-20180415200931892-2126329512.png

转载于:https://www.cnblogs.com/yiyeluo0701/p/8757650.html

你可能感兴趣的文章
【Oracle】函数
查看>>
英语发音规则---T字母
查看>>
spring boot 生成 war 包有一个war.original是什么?
查看>>
Silverlight & Blend动画设计系列十一:沿路径动画(Animation Along a Path)
查看>>
WPF程序加入3D模型
查看>>
头文件中尽量少引用命名空间
查看>>
Build a Basic CRUD App with Vue.js and nodejs
查看>>
Oracle学习笔记整理手册
查看>>
WPF模板(二)应用
查看>>
Java 8 Streams filter examples
查看>>
Java数组的基本讲解
查看>>
MS CRM 2011 剖析Ribbon与背后的Jscript
查看>>
云:构建云计算的核心技术与平台
查看>>
DOCUMENT.GETELEMENTBYID使用
查看>>
一生中很值得看的30个故事之一断箭
查看>>
Android五大基本组件之一-----Service篇
查看>>
DHCP与BOOTP有什么区别
查看>>
电子书下载:Pro ASP.NET MVC 3 Framework 3rd Edition
查看>>
哎,累死了 加班加到八点半才解决问题
查看>>
MATLAB Builder for .NET
查看>>