• 【C++笔试强训】第二十九天


    🎇C++笔试强训


    • 博客主页:一起去看日落吗
    • 分享博主的C++刷题日常,大家一起学习
    • 博主的能力有限,出现错误希望大家不吝赐教
    • 分享给大家一句我很喜欢的话:夜色难免微凉,前方必有曙光 🌞。

    在这里插入图片描述

    💦🔥


    选择题

    💦第一题

    某台微机安装的是 64 位操作系统,“ 64 位”指的是( )

    A CPU的运算速度,即CPU每秒钟能计算64位二进制数据
    B CPU的字长,即CPU每次能处理64位二进制数据
    C CPU的时钟主频
    D CPU的型号

    在这里插入图片描述

    这道题的答案是B


    💦第二题

    对于Linux说法,下列说法正确的是()

    A 线性访问内存非法时,当前线程会进入信号处理函数
    B 用mv命令移动文件时,文件的修改时间会发生变化
    C ulimit -c设置的是函数调用栈的大小
    D malloc函数是应用程序向操作系统申请内存的接口

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    这道题的答案是A


    💦第三题

    以下哪个命令可以改变进程的优先级

    A twice
    B chnice
    C nice
    D renice

    在这里插入图片描述

    这道题的答案是D


    💦第四题

    单任务系统中两个程序A和B,其中

    A程序:CPU:10s -> 设备1:5s -> CPU:5s ->设备2:10s ->CPU:10s;
    B程序:设备1:10s-> CPU:10s -> 设备2:5s ->CPU:5s ->设备2:10s;

    执行顺序为A->B,那么CPU的利用率是()

    A 30%
    B 40%
    C 50%
    D 60%

    在这里插入图片描述

    这道题的答案是C


    💦第五题

    下述哪种情况会提出中断请求()

    A 在键盘输入过程中,每按一次键
    B 两数相加结果为零
    C 计算结果溢出
    D 一条系统汇编指令执行完成

    在这里插入图片描述

    这道题的答案是A


    💦第六题

    以下哪些不是内核对象()

    A 进程
    B 线程
    C 互斥器
    D 临界区

    在这里插入图片描述

    这道题的答案是D


    💦第七题

    在 Linux 中,如果系统的 umask 设置为 244,创建一个新文件它的权限是()

    A --w-r–r–
    B -r-xr–r–
    C -r—w–w-
    D -r-x-wx-wx

    在这里插入图片描述

    这道题的答案是C


    💦第八题

    由源代码生成可执行文件需要经过预编译,编译,汇编,链接等阶段,错误:unresolved external symbol BeginScene属于()阶段错误。

    A 预编译
    B 编译
    C 汇编
    D 链接

    在这里插入图片描述

    这道题的答案是D


    💦第九题

    程序出错在什么阶段()?

    int main(void)
    {
    	http://www.taobao.com
    	cout << "welcome to taobao" << endl;
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    A 预处理阶段出错
    B 编译阶段出错
    C 汇编阶段出错
    D 链接阶段出错
    E 运行阶段出错
    F 程序运行正常

    在这里插入图片描述

    这道题的答案是F


    💦第十题

    有一个变量int a=0;两个线程同时进行+1操作,每个线程加100次,不加锁,最后a的值是()?

    A 200
    B <=200
    C >=200
    D 都有可能

    在这里插入图片描述

    这道题的答案是B


    编程题

    🔥 第一题

    链接:求正数数组的最小不可组成和

    在这里插入图片描述

    • 题目解析

    arr = {3,2,5} arr的min为2,max为10,在区间[2,10]上,4是不能被任何一个子集相加得到的值中最小的,所以4是arr的最小不可组成和;

    • 解题思路

    这是一个动态规划的01背包问题;
    根据承重和已有的重量种类阶段性计算当前承重时能够放入的重量
    当数组中只有2重量的时候,背包承重从2-10都可以放入2的数值 当数组中放入2和3重量的时候,背包承重从5-10,可以放入5,3-4放入3,2只能放入2 当数组中放入2,3,5重量时,背包承重10放入10,8-9放入8,7放入7,5-6,放入5…

    w 2 3 4 5 6 7 8 9 10

    2 2 2 2 2 2 2 2 2 2 3 2 3 3 5 5 5 5 5 5 5 2 3 3 5 5 7 8 8 10

    最终当每个承重与放入的重量不同时,这个承重就是最小不可求和—4

    • 代码演示:
    class Solution {
    public:
    	/**
    	 *	正数数组中的最小不可组成和
    	 *	输入:正数数组arr
    	 *	返回:正数数组中的最小不可组成和
    	 */
    	int getFirstUnFormedNum(vector<int> arr, int len) {
            int min = arr[0];
            int max = 0;
            for(int i = 0;i < len;i++)
            {
                if(arr[i] < min)
                {
                    min = arr[i];
                }
                max += arr[i];
            }
            
            vector<int> dp(max+1,0);
            
            for(int i = 0;i < len;i++)
            {
                //j : 背包空间大小
                //dp[j] : 背包的最大承重
                for(int j = max;j >= arr[i];j--)
                {
                    if(dp[j] < dp[j-arr[i]] + arr[i])
                    {
                        dp[j] = dp[j-arr[i]] + arr[i];
                    }
                }
            }
            
            for(int i = min;i <= max;i++)
            {
                if(i != dp[i])
                {
                    return i;
                }
            }
            
            return max + 1;
            
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    🔥 第二题

    链接:有假币

    在这里插入图片描述

    • 解题思路

    平均分三份是最快的方法,两份进行称重(对比出三个的重量 ),后对最重的那份再次进行称重,直到称重的个数不足2个时则结束,获得假币 如果无法平均分3分则余数要么是1要么是2,因为是要最多称几次,n=n/3+1满足每次取最大 分称3份,取两份一样多的过秤,然后把三份中最多的那份继续分,直到硬币剩余0或1时截至

    • 代码演示
    // write your code here cpp
    #include 
    using namespace std;
    
    int main()
    {
        int n;
        while(cin >> n)
        {
            if(n == 0)
                return 0;
            
            int count = 0;
            while(n > 1)
            {
                count++;
                n = n/3 + (n % 3 > 0 );
            }
            cout << count << endl;
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

  • 相关阅读:
    OpenvSwitch 子项目 OVN 功能介绍(一)
    Qt 使用QtXlsx操作Excel表
    Linux 忘记密码怎么办,CentOS和Ubuntu重置密码方法
    nodejs 中 axios 设置 burp 抓取 http 与 https
    【BSP开发学习5】GPIO子系统
    力扣刷题-二叉树-二叉树的高度与深度
    2022年,软件测试还能学吗?别学了,软件测试岗位饱和了...
    Vue3系列2--项目目录介绍及运行项目
    【UML用户指南】-16-对高级结构建模-构件
    【毕业设计】基于超声波智能跟随小车 - 单片机 物联网 stm32 c51
  • 原文地址:https://blog.csdn.net/m0_60338933/article/details/127940942