BUPT复试专题—内存分配(2014-2)

题目描述

在操作系统中,内存分配是非常重要的工作。
己知内存空间由N个内存块组成,这些内存块从1到N编号。
进行内存分配时,操作系统将选择一块大小足够的内存全部分配给请求内存的进程。例如,当进程请求10MB的内存时,操作系统必须向该进程分配一个不小于 10MB的内存块。内存块不能重复分配。
操作系统有三种基本的分配方式,分别为:
•首次适应:从1号到N号内存块依次査找,直到找到第一块足够大的且未分配出去的内存块,将其分配给进程。
•最佳适应:找到当前未分配出去且大小足够的内存块中最小的内存块分配给进程。
•最差适应:找到当前未分配出去且大小足够的内存块中最大的内存块分配给进程。
其中,最佳适应方式是应用最为广泛。现在,操作系统要依次处理M个进程的内存请求,请按照最佳适应方式分配内存,并输出相应的内存块的大小。如果,没有大小足够的内存块可以满足当前请求,则输出”NULL"(不包含引号〕,并跳过该请求。

输入

输入数据的第一行是测试数据组数T (T<=20)
每组数据由4行构成:
第一行为一个整数N(1~100),表示有N个内存块 
第二行有N个整数,第i个整数表示第i块内存块的大小 
第三行为一个整数M (1 ~ 100),表示有M个请求
第四行有M个整数,表示进程所请求的内存空间。

输出

每组数据输出一行,每行有M个数,表示操作系统采用最佳适应方式,依次分 配给进程的内存块大小;
如果没有讨用内存块,输出”NULL"(不包含引号〕
不要输出多余的行尾空格。

样例输入

2
4
7 5 10 3
2
4 6
4
3 5 9 10
3
5 12 6

样例输出

5 7
5 NULL 9

来源

2014机考B题

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
using namespace std;
int sort(const void *a,const void *b)
{
    return *(int *)a-*(int *)b;
}
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int number,i=0,donser[101],ask,what;
        cin>>number;
        while(i<number)
        {
            cin>>donser[i];
            i++;
        }
        qsort(donser,number,sizeof(int),sort);
        cin>>ask;i=0;
        while(i<ask)
        {
            cin>>what;
            int lable=0;
            for(int j=0;j<number;j++)
            {
                if(donser[j]>=what)
                {
                    if(i!=ask-1)
                        cout<<donser[j]<<" ";
                    if(i==ask-1)
                        cout<<donser[j]<<endl;
                    donser[j]=0;
                    qsort(donser,number,sizeof(int),sort);
                    lable=1;
                    break;
                }
            }
            if(lable==0)
            {
                if(i!=ask-1)
                    cout<<"NULL"<<" ";
                if(i==ask-1)
                    cout<<"NULL"<<endl;
            }
            i++;
        }
    }
    return 0;
}

原文地址:https://www.cnblogs.com/dzzy/p/8535393.html

时间: 2024-10-03 19:59:50

BUPT复试专题—内存分配(2014-2)的相关文章

BUPT复试专题—中位数(2014-2)

题目描述 给定一个长度为N的非降数列,求数列的中位数.中位数:当数列的项数N为奇数吋,处于中间位置的变最值即为中位数:当N 为偶数时,中位数则为处于中间位置的两个数的平均数. 输入 输入数据第一行是一个整数T (1~100),表示测试数据的组数.对于每组测试数据:第一行是一个正整数N (1~100),表示数列长度.第二行有N个整数,整数之间用空格隔开,所有的整数都不超过10^5,表示这个数列. 输出 输出数列的中位数不要输出小数点末尾多余的0 样例输入 2 4 1 1 2 2 5 1 1 2 2

BUPT复试专题—分数加法

题目描述 求2^-a + 2^-b,其中a和b均为正整数,结果用最简分数表示 输入 第一行为测试数据的组数T (1~400).请注意,任意两组测试数据之间相互独立的.每组测试数据一行,包含两个整数a和b (2~20). 输出 对于每组测试数据,输出结果. 样例输入 2 2 4 3 2 样例输出 5/16 3/8 来源 2014网研A题 #include<algorithm> #include<iostream> #include<cstdio> #define ll l

BUPT复试专题—哈夫曼树

题目描述 哈夫曼树,第一行输入一个数n,表示叶结点的个数.需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和. 输入描述: 输入有多组数据.每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2<=n<=1000). 输出描述: 输出权值. 示例1 输入 5 1 2 2 5 9 #include<iostream> #include<cstdio> #include<cmath

BUPT复试专题—找K小数

题目描述 查找一个数组的第K小的数,注意同样大小算一样大. 如  2 1 3 4 5 2 第三小数为3. 输入描述: 输入有多组数据.每组输入n,然后输入n个整数(1<=n<=1000),再输入k. 输出描述: 输出第k小的整数. 示例1 输入 62 1 3 5 2 23 #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<stri

BUPT复试专题—比较奇偶数

题目描述 第一行输入一个数,为n,第二行输入n个数,这n个数中,如果偶数比奇数多,输出NO,否则输出YES. 输入描述: 输入有多组数据.每组输入n,然后输入n个整数(1<=n<=1000). 输出描述: 如果偶数比奇数多,输出NO,否则输出YES. 示例1 输入 51 5 2 4 3 输出 YES #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #i

BUPT复试专题—C翻转

题目描述 首先输入一个5 * 5的数组,然后输入一行,这一行有四个数,前两个代表操作类型,后两个数x y代表需操作数据为以x y为左上角的那几个数据. 操作类型有四种:  1 2 表示:90度,顺时针,翻转4个数  1 3 表示:90度,顺时针,翻转9个数  2 2 表示:90度,逆时针,翻转4个数  2 3 表示:90度,逆时针,翻转9个数 输入描述: 输入有多组数据.每组输入一个5 * 5的数组,然后输入一行,这一行有四个数,前两个代表操作类型,后两个数x y代表需操作数据为以x y为左上角

BUPT复试专题—打牌

https://www.nowcoder.com/practice/82442ee76977479e8ab4b88dfadfca9f?tpId=67&tqId=29640&tPage=0&ru=/kaoyan/retest/1005&qru=/ta/bupt-kaoyan/question-ranking 题目描述 牌只有1到9,手里拿着已经排好序的牌a,对方出牌b,用程序判断手中牌是否能够压过对方出牌.  规则:出牌牌型有5种   [1]一张 如4 则5...9可压过 [

BUPT复试专题—List

题目描述 在该LIST上实现3种操作 1.append x在该LIST末尾添加x,x是32位整数 2.pop删除该LIST末尾的数 3.find i寻找第i个数,若i为负数表示寻找倒数第i个数,例如i = -1表示寻找倒数第一个 输入 首先一个数t表示以下有t个m 第一行输入一个m,表示有m条操作,接下来每行输入一条操作 输出 当输入find i时输出找到的数 样例输入 2 5 append 1 append 2 find 1 find -1 pop 6 append 1 append 2 ap

BUPT复试专题—图像压缩存储

题目描述 以二维数组表示图像,其值只有0.1两种,寻找两幅图像中最大的相同方阵 输入 第一行输入一个n,接下来的2n行输入两个n*n数组,寻找一个最大的m*m子区域,使得两个数组在该子区域完全相同 输出 输出m 样例输入 4 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 0 样例输出 2 来源 2015机考C题 #include<iostream> #include<cstdio> #include<