1. 程式人生 > >BUPT復試專題—內存分配(2014-2)

BUPT復試專題—內存分配(2014-2)

http 表示 break 內存 滿足 在操作 eof php 整數

題目描述

在操作系統中,內存分配是非常重要的工作。
己知內存空間由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; }

BUPT復試專題—內存分配(2014-2)