每日一题 | day29 (有假币| 求正数数组的最小不可组成和)

Posted WhiteShirtI

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一题 | day29 (有假币| 求正数数组的最小不可组成和)相关的知识,希望对你有一定的参考价值。

选择题

1、X86体系结构在保护模式下中有三种地址,请问一下那种说法是正确的?
A 虚拟地址先经过分段机制映射到线性地址,然后线性地址通过分页机制映射到物理地址
B 线性地址先经过分段机制映射到虚拟地址,然后虚拟地址通过分页机制映射到物理地址
C 虚拟地址先经过分页机制映射到线性地址,然后线性地址通过分段机制映射到物理地址
D 线性地址先经过分页机制映射到虚拟地址,然后虚拟地址通过分段机制映射到物理地址

正确答案 A:此属于段页式内存管理,先通过地址中的段号,找到段表项,通过段表项中段内页表起始地址找到自己的页表,通过地址中的段内页号,在这个页表中找到页表项,通过页表项中的物理块号和页内偏移最终得出物理地址

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

正确答案 B:当线性访问内存非法时,系统会向当前线程发送一个信号,此时线程会进入信号处理函数去处理这个信号;B选择中MV命令移动文件时不会修改时间;C选择中ulimit用于shell启动进程所占用的资源.-c size:设置core文件的最大值.单位:blocks;

3、以下说法不正确的是()
A 进程调度中"可抢占"和"非抢占"两种方式,后者引起系统的开销更大
B 每个进程都有自己的文件描述符表,所有进程共享同一打开文件表和v-node表
C 基本的存储技术包括RAM,ROM,磁盘以及SSD,其中访问速度最慢的是磁盘,CPU的高速缓存一般是由RAM组成的
D 多个进程竞争源出现了循环等待可能造成系统死锁

正确答案 A:可抢占调度比非抢占调度引起系统的开销更大

4、下述哪种情况会提出中断请求()
A 在键盘输入过程中,每按一次键
B 两数相加结果为零
C 计算结果溢出
D 一条系统汇编指令执行完成

正确答案 A:

5、以下哪些不是内核对象()
A 进程
B 线程
C 互斥器
D 临界区

正确答案 D:临界区属于用户态对象,只能在用户态来操作

6、如果系统的umask设置为244,创建一个新文件后,它的权限:()
A --w-r–r--
B -r-xr–r--
C -r—w–w
D -r-x-wx-wx

正确答案 C:umask是设置文件和目录的默认权限的掩码。默认权限=~(244)=533,目录新创建出来的默认权限则为533,但是如果是文件则默认取消可执行的权限,所以为522

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

正确答案 D:

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

int main(void)
{
	http://www.taobao.com
	cout << "welcome to taobao" << endl;
	return 0;
}

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

正确答案 F:http:相当于1个标签(C++很少是用的语法),而后面两个斜杠相当于是注释,将后面的内容注释掉了

编程题

题目1
在这里插入图片描述
解题思路:这种问题我们可以将硬币分成3部份,如果3份都相同则任意任意取两份进行称重,如果两个这两份一样重,则说明假币在第三份中,则继续将第三份进行划分成3部分,一次类推,直到最后为1的情况则就能找出。
在这里插入图片描述
代码

#include <iostream>
using namespace std;

int main()
{
    int n;
    while (cin >> n && n != 0)
    {
        int count = 0;
        while (n > 1)
        {
            if (n % 3 == 0)//能平均分成3份
            {
                n /= 3;
            }
            else //余1或者余2,都是取平均划分的3份+1
            {
                n = n / 3 + 1;
            }
            ++count;
        }
        cout << count << endl;
    }
    return 0;
}

题目2
在这里插入图片描述
解题思路:这道题我们可以将问题转换为0-1背包问题
我们可以认为我们有min-max的所有容量的背包
在这里插入图片描述

代码

class Solution {
public:
	int getFirstUnFormedNum(vector<int> arr, int len) 
    {
        int min = arr[0];
        int max = 0;
        for (const auto& e : arr)
        {
            if (e < min)
                min = e;
            max += e;
        }
        
        //背包0-10个背包,一共有11个背包
        //dp[j]为空间为j的背包的最大承重
        vector<int> dp(max + 1, 0);
        for (int i = 0; i < len; ++i)//依次放入物品
        {
            //j为背包空间的大小  
            //dp[j]为背包的最大承重
            //背包空间如果比物品重量小,则不需要再看
            for (int j = max; j >= arr[i]; --j)
            {
                //j-arr[i]为放入i号物品后剩余容量
                //需要查看空间为剩余容量的背包最大承重dp[j - arr[i]]
                //剩余容量的背包最大承重dp[j - arr[i]]+i号物品
                //如果比这个背包之前的承重还重,则需要更新
                if (arr[i] + dp[j - arr[i]]> dp[j])
                {
                    dp[j] = dp[j - arr[i]] + arr[i];
                }
            }
        }
        
        //查看背包的空间和背包的最大承重的关系
        for (int i = min; i <= max; ++i)
        {
            if (i != dp[i])
                return i;
        }
        return max+1;
    }
};

以上是关于每日一题 | day29 (有假币| 求正数数组的最小不可组成和)的主要内容,如果未能解决你的问题,请参考以下文章

每日一题 | day15( 查找输入整数二进制中1的个数 | 手套)

每日一题 - 剑指 Offer 42. 连续子数组的最大和

leetcode每日一题(2020-06-27):41. 缺失的第一个正数

每日一题 | day11(最近公共祖先 | 求最大连续bit数)

算法·每日一题(详解+多解)-- day15

算法·每日一题(详解+多解)-- day15