1.学习总结(2分)
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 代码截图
2.1.3 PTA提交列表说明。
- 一开始在输入字符到数组时,我用的是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代码截图
2.2.3 PTA提交列表说明。
- 一开始,不知道用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代码截图
2.3.3PTA提交列表截图
- 一开始是flag=0写成flag==0;部分正确;
- 第二个是输出最后一个元素的时候,Q1有剩只会剩一个元素,但是Q2却不一定,所以在while循环结束后的输出,对于Q2的写法不同于Q1,调试后找到错误并改正;
3.1 栈PTA排名
3.2 队列PTA排名
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<
- 这道题是网搜的银行排队单队列多窗口