笔试记录++

1.小明当起了矿场的爆破工程师。小明工作的矿场可以看作一个NxN的二维网格,小明可以将一个炸弹放置到矿场的任意位置,若干时间后炸弹会爆炸,将炸弹所在处及相邻位置炸开,让工人们可以轻松获得那些位置的矿物。现在给出这个矿场的矿物数量分布,请你帮小明找出一个最佳位置,使得炸完后能获得的矿物数量最大。你只需要告诉小明这个最大数量即可。 在第i行i列的矿物数量为a[m(当1si,j≤N),否则为0(即超出矿场边界时不会获得任何矿物)。若放置炸弹在(ij),爆炸范围为(ij),(i+1,j).(.j+1),(i-1,j),(ù,j-1)。注意小明只能把炸弹放置到矿场内,但可能爆炸范围超出边界。 输入描述 第一行一个整数N,表示小明工作的矿场大小。 接下来N行,每行N个整数。接下来的第i行形如a0[1]a[[2]..a0[N]。表示这矿场内所有位置的矿物数量。对于100%的数据,1≤N≤800.0samils100000 输出描述 输出一个整数表示小明安放一个炸弹,其爆炸范围内矿物数量之和的最大值

import sys

n = int(input())  # 读取矿场的大小
print(n)
result = []
count = 0

# 读取矿场矿物分布
for line in sys.stdin:
    if count == n:
        break
    count += 1
    line = line.split()
    line = [int(x) for x in line]
    result.append(line)

max_result = float('-inf')  # 初始化最大值

# 遍历每个放置炸弹的位置 (i, j)
for i in range(n):
    for j in range(n):
        sum1 = result[i][j]  # 炸弹位置的矿物

        # 检查上下左右四个邻居是否在边界内,若在边界内则加上矿物数量
        if i + 1 < n:  # 下方
            sum1 += result[i+1][j]
        if i - 1 >= 0:  # 上方
            sum1 += result[i-1][j]
        if j + 1 < n:  # 右方
            sum1 += result[i][j+1]
        if j - 1 >= 0:  # 左方
            sum1 += result[i][j-1]

        # 更新最大矿物数量
        max_result = max(max_result, sum1)

# 输出最大矿物数量
print(max_result)

直接暴力,还能通过 

2.小明正在帮一个工厂规划生产计划。小明已经知道未来n天工厂会有的情况,初始时机器热量为0,如果第i天启动生产那么热量会增加a,产生b,的收益。若第天没有生产,则热量会减少c。小明知道他应该保证在任何情况下热量都不大于闽值T,否则机器会损坏。小明想知道在最佳规划下,工厂最大能获得多少收益。注意热量最低为0,再降温将无效。 输入描述 第一行两个整数n和T,表示工厂规划天数和热量闽值。 第二行3n个整数a,b,c,a,b,c..abc,含义如题面。 对于100%的数据,1sns3000,1≤T≤100,0sa,csT,0sb≤100000. 输出描述 输出一个整数表示答案。(DP问题)

# 读取输入
n, T = map(int, input().split())
data = list(map(int, input().split()))

# 初始化生产参数数组 a, b, c
a = []
b = []
c = []
for i in range(n):
    a.append(data[3*i])
    b.append(data[3*i + 1])
    c.append(data[3*i + 2])

# 定义dp数组,dp[i][h]表示前i天,热量为h时的最大收益
# 初始状态是 dp[0][0] = 0,其他状态初始化为无效值 -1(表示无法达到)
dp = [[-1] * (T + 1) for _ in range(n + 1)]
dp[0][0] = 0

# 遍历每一天
for i in range(1, n + 1):
    for h in range(T + 1):
        if dp[i-1][h] != -1:  # 只有前一天这个热量状态有效时才进行转移
            # 如果不生产,热量减少,收益不变
            new_heat = max(0, h - c[i-1])  # 降温
            dp[i][new_heat] = max(dp[i][new_heat], dp[i-1][h])
            
            # 如果生产,热量增加并且收益增加
            new_heat = h + a[i-1]
            if new_heat <= T:  # 确保热量不超过阈值T
                dp[i][new_heat] = max(dp[i][new_heat], dp[i-1][h] + b[i-1])

# 找到在第n天所有可能热量下的最大收益
max_profit = max(dp[n])

# 输出结果
print(max_profit)

3.下列属于临界资源的是() 打印机 共用队列; 非临界:非共享资源 内存

在操作系统中,临界资源是指某种资源,当多个进程访问该资源时,如果不进行合理的同步控制,就可能会导致数据不一致或其他问题。临界资源通常是共享资源,且只有一个进程能在某个时刻独占使用。

内存虽然可以是共享的,但通常不同的进程拥有各自独立的内存空间,且内存访问由操作系统管理,避免了进程间的竞争,因此它不是典型的临界资源。

4.哪种调度算法会综合考虑作业/进程的等待时间和要求服务的时间() FCFS SJF SPF HRRN

综合考虑作业/进程的等待时间要求服务的时间的调度算法是 HRRN(Highest Response Ratio Next,最高响应比优先调度算法)

  • HRRN 的调度原则是通过计算每个进程的响应比来决定优先级。响应比的计算公式为:
    •                         响应比=等待时间+服务时间服务时间
  • 这样,等待时间长的作业会得到优先考虑,但同时也兼顾了服务时间较短的作业,避免了“短作业优先”(SJF)调度算法可能导致的长作业饥饿问题。

其他选项分析:

  • FCFS(First Come First Serve,先来先服务):不考虑等待时间和服务时间,只按照到达顺序进行调度。
  • SJF(Shortest Job First,短作业优先):只考虑服务时间,不考虑等待时间,优先调度服务时间最短的作业。
  • SPF:通常是指短进程优先,与 SJF 类似,也是只考虑服务时间。

5.声明时没有初始化,也没有使用初始化参数列表,而是再构造函数里面进行初始化。

C++中 strcpy 用来复制字符串到 name 数组中。这里的name其实就是首个字符的地址,所以y采用const char指针;

#include <iostream>
#include <cstring>  // 用于 strcpy 函数
using namespace std;

class student {
    int no;        // 学号
    char name[30]; // 姓名
public:
    // 构造函数,用于初始化 no 和 name
    student(int x, const char *y) {
        no = x;
        strcpy(name, y);
    }
    
    // 成员函数,输出学号和姓名
    void f() {
        cout << no << name << endl;
    }
};

int main() {
    // 创建一个 student 对象 s1,初始化学号和姓名
    student s1(1001, "AA");
    
    // 调用成员函数 f,输出结果
    s1.f();

    return 0;
}

6.针对某web系统的响应时延进行了N次测试,得到N个不同的响应时延结果,要想获得最差5%的响应时延值(大于该时延值得比例为5%)应采用下列哪种数据处理方式()

散点图拟合曲线

散点(Scatter)图

概率分布(PDF)图

累计概率分布(CDF)图

7.cat /etc/passwd | awk -F: '{print $1,$7}'
用户名:密码占位符:用户ID:组ID:用户信息:主目录:默认Shell

这里的解释:

  • -F::指定 : 作为字段分隔符。
  • $1:表示第1列(用户名)。
  • $7:表示第7列(默认Shell)。

1. cut -d':' -f1,3 /etc/passwd 的用法解释

cut 命令:
  • cut 用于从文本中提取某些特定的部分或字段。它通过分隔符将文本分为多个字段,并按用户需求输出指定字段。
参数解析:
  • -d':':指定分隔符 :,即告诉 cut 命令将输入的每一行根据 : 来分割成不同的字段。在 /etc/passwd 文件中,字段是用冒号(:)分隔的,每一行包含用户名、密码提示符、用户ID、组ID、用户信息、主目录、登录 Shell 等信息。
  • -f1,3:选择要输出的字段,即第 1 和第 3 字段。这里的 1 指代每一行的第 1 个字段,3 指代每一行的第 3 个字段。

2. echo "file1 file2 file3" | xargs rm 的用法解释

echo 命令:
  • echo 用于在命令行中输出字符串。在这里,echo "file1 file2 file3" 会输出字符串 "file1 file2 file3"
xargs 命令:
  • xargs 作用是将标准输入转换为命令的参数,通常与其他命令结合使用。它从标准输入读取数据,并将其作为参数传递给后续的命令。在本例中,xargs 将标准输入 "file1 file2 file3" 传递给 rm 命令。
rm 命令:
  • rm 是删除文件的命令。它用于删除指定的文件或目录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值