PTA甲级刷题记录——数学问题
PTA甲级刷题记录——数学问题题解,方便自己复盘
A1008 Elevator (20分)(简单数学)
题目大意:
有一部电梯,最开始停在第0层,上一层需要6s,下一层需要4s,每次到达当前的目的楼层需要停留5s。现给出电梯要去的楼层的顺序,求总共花费的时间(最后不需要回到第0层)
#include <iostream>using namespace std;int main(int argc, const char * argv[]) { // insert code here... int n; cin>>n; int now = 0;//当前位置 int ans = 0;//消耗 int to;//目的位置 for(int i = 0 ; i< n ; i ++) { cin>>to; if(to>now) { ans += (to-now)*6; ...
PTA甲级刷题记录——算法初步
PTA甲级刷题记录——算法初步题解,方便自己复盘
1010 Radix (25分)(二分)
题目大意:
输入四个整数N1,N2,tag,radix。其中tag1表示N1为radix进制数,tag2表示N2为radix进制数。范围:N1和N2均不超过10个数位,且每个数位均为0~9或a~z,其中0~9表示数字,a~z表示数字10~35.
求N1和N2中未知进制的那个数是否存在,并满足某个进制时和另一个数在十进制下相等的条件。若存在,则输出满足条件的最小进制,否则,输出Impossible
将已经确定进制的数放在N1,未确定进制的数放在N2,以便在后面进行统一的计算。
将N1转化为十进制,使用long long类型来存储。考虑对一个字符串来说,它的进制越大,将该数字串转化为十进制的结果也就越大,因此就可以使用二分法。二分N2的进制,将N2从该进制转化为十进制,令其与N1的十进制比较:如果大于N1的十进制,说明N2的当前进制太大,应该往左子区间继续二分;如果小于N2的十进制,说明N2的当前进制太小,应往右子区间继续二分,当二分结束时即可判断解是否存在。
#include < ...
PTA甲级刷题记录——入门模拟
PTA甲级刷题记录——入门模拟题解,方便自己复盘
A1001 A+B Format (20分)(字符串处理)
题目大意:
给出两个正数a,b(不超过10^9),求a+b的值,并按照标准格式输出(xxx,xxx,xxx,xxx)
思路:
(1)将a,b累加,判断是否为负,为负则输出负号,并将sum取绝对值,为正则不作处理
(2)将sum模式取余,结果存入数组
(3)输出时从高位输出,每输出3个数字则输出1个逗号,最后不输出逗号
注意:
必须判断sum为0的情况,否则有个测试点过不去
#include <iostream>#include <cmath>using namespace std;int main(int argc, const char * argv[]) { int a,b,sum; scanf("%d%d",&a,&b); sum = a+b; if(sum < 0)//sum为负数时,输出负号,将sum取绝对值 { cout< ...
PTA甲级刷题记录——专题扩展
PTA甲级刷题记录——专题扩展题解(一些复杂的模拟题),方便自己复盘
1014 Waiting in Line (30分)(大模拟)
题目大意:某个银行有N个窗口,每个窗口前最多可以排M个人。现在有K位客户需要服务,每位客户的服务时长已知。假设所有客户均在08:00按客户编号次序等在黄线外,且如果有窗口的排队人数没有排满(没有达到M人),当前在黄线外的第一个客户就会选择这样的窗口中排队人数最少的窗口排队(排队人数相同时选择窗口序号最小的窗口去排队)。给出Q个查询,每个查询给出一位客户的编号,输出这位客户的服务结束时间。注意,如果一个客户在17:00之后还没有被服务到,则不再服务,输出Sorry;而如果一个客户在17:00之前被服务,那么无论他的服务时长有多长,都会接受完整的服务。
输入解释:第一行的四个数字表示,N(窗口数),M(每个窗口前最多的排队人数),K(客户数),Q(查询数)
第二行位K位客户的处理时间
第三行为需要查询的客户编号
思路:
(1)当一位客户进入某一窗口的队列时,他的服务结束时间就已经确定了,即当钱在窗口排队的所有人的服务时间之和。而在所有窗口排满后,剩 ...
leetcode刷题——树(困难)
leetcode刷题记录,有关树的困难难度算法题
leetcode刷题——树(中等)
leetcode刷题记录,有关树的中等难度算法题
94. 二叉树的中序遍历
给定一个二叉树,返回它的中序 遍历。
1.非递归中序遍历
struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solution {public: vector<int> result; vector<int> inorderTraversal(TreeNode* root) { stack<TreeNode*> stack; TreeNode * cur = root; while (cur || !stack.empty()) { while (cur ) { ...
leetcode刷题——树(简单)
leetcode刷题记录,有关树的简单难度算法题
530. 二叉搜索树的最小绝对差
题目:给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
通过中序遍历二叉搜索树得到的关键码序列是一个递增序列。
中序遍历二叉搜索树,第一个结点外的每个节点与其前一节点的差值,如果该值小于最小绝对差,就用它更新最小绝对差。
struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} TreeNode(int x,TreeNode * l,TreeNode * r) : val(x), left(l), right(r) {}};class Solution {public: vector<int> temp; int getMinimumDifference(TreeNode* ...
操作系统课程设计-nachos(java版) Project4:Networks and Distributed Systems
操作系统课程设计Project3(网络和分布式系统)系统设计与实现
项目地址
https://github.com/ccclll777/nachos_os_design
如果觉得有用,请点个star
初探与网络系统有关的类
有关网络上数据传输的类为nachos.machine.Networklink和nachos.network.postoffice,在两者的配合下,进行数据包的发送与接收。
【1】Networklink类
同一个机器上运行的不同nachos实例可以使用networklink类通过网络相互通信。
其中有多个线程进行线程之间的同步,来进行网络消息的传输。
在接收数据包时:
如果已经收到消息时,会会进行wait(),直到允许接收数据包时(某个变量为null),会进行notify()。
而底层数据包的收发是经过java的DatagramSocket类进行的,将接收到的消息通过DatagramPacket类拷贝到内存中的某个地方。
在发送数据包时:
会构造一个DatagramPacket的对象,然后使用DatagramSocket进行数据包的发送。
数据包的发送和接受是通 ...
操作系统课程设计-nachos(java版) Project3:Caching and Virtual Memory
操作系统课程设计Project3(虚拟存储)系统设计与实现
项目地址
https://github.com/ccclll777/nachos_os_design
如果觉得有用,请点个star
有关Linux操作系统交换文件,交换分区
Linux将随机存储RAM称为内存页。交换技术就是将一页内存复制到预先设定的硬盘上的交换空间,来释放该页占用内存。物理内存和交换空间的和就是可提供的虚拟内存的总量。
有两个原因证明交换技术是很重要的。首先,系统需要的内存量比物理内存更大时,系统内核可以把较少使用的内存页写到交换空间,把空闲出来的内存给当前的应用程序(进程)使用。其次,一个应用启动时使用的内存页,可能只是在初始化时使用,之后不会再用,操作系统就可以把这部分内存页写入交换空间,把空闲出来的内存给其他应用使用或作为磁盘高速缓存。
Linux支持将一块硬盘或者某块硬盘的某块区域设定为交换分区,在缺少物理内存时,可以进行交换,比直接换入硬盘的普通区域效率要更高一些。
Project3:Caching and Virtual Memory(虚拟存储)系统设计与实现
【1】总体描述
NACHOS ...
操作系统课程设计-nachos(java版) Project2:Multiprogramming
操作系统课程设计Project2多道程序设计系统设计与实现
项目地址
https://github.com/ccclll777/nachos_os_design
如果觉得有用,请点个star
nachos用户程序初探
nachos的用户程序需要使用mips交叉编译,虽然伯克利的管网给出了很多操作系统版本的mips编译器,但是经过一天的挣扎,最后还是在64为的centos上,对用户程序成功进行了编译。
编译时,需要修改makefile,将自己新加的程序加入makefile,然后在test文件夹下执行make,即可成功编译用户程序。
nachos提供了coff文件的加载类,nachos将coff文件加载之后,会将其分成若干个coffsection的段,然后对每一个段进行loadpage的操作,将其加载到物理内存中。而coff类和coffsection就是做用户程序加载工作的。
而nachos用户程序调用内核的系统调用,是通过test文件中的start.s进行链接的,此文件包含用于初始化进程的汇编语言代码。它还提供了允许调用系统调用的系统调用“stub code”。这利用了特殊的mip ...