程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 【奇虎360】 2017年校招筆試題 (技術崗編程題,3602017年

【奇虎360】 2017年校招筆試題 (技術崗編程題,3602017年

編輯:C++入門知識

【奇虎360】 2017年校招筆試題 (技術崗編程題,3602017年


哎,感覺考試好難啊啊啊啊啊啊!!!!40個選擇題+兩個編程題。120分鐘。那麼多讀程序的題目。題目都看不完有木有啊!!!!!!!!感覺整個人生都不好了。 題目描述:(具體的也記不清楚了,但是主要內容就是下面的) 模擬內存的分配 釋放 和 整理。 操作如下: new size:分配size字節大小的內存塊,返回內存塊的句柄handle,size為正整數,如果沒有合適的空間返回null。 del handle:釋放句柄handle指向的內存塊。 def 整理內存碎片。 輸入第一行為一個n,m , 分別表示操作次數和內存空間大小。 接下來n行是表示一個操作。 樣例: 輸入: 6 10 new 5 new 3 del 1 new 6 def new 6 輸出: 1 2 NULL 3  
  1 #include<iostream>
  2 #include<list>
  3 #include<string>
  4 using namespace std;
  5 struct Memory{
  6     unsigned int value;
  7     unsigned handle ;
  8     bool isuesed;//使用1 沒有使用0
  9 };
 10 
 11 void New(list<Memory> &list_memory,unsigned int value,int &handle ){
 12     bool is_success = false;
 13     for (list<Memory>::iterator i = list_memory.begin(); i != list_memory.end(); i++){
 14         if (!(*i).isuesed && (*i).value >= value){
 15             if ((*i).value == value){
 16                 (*i).isuesed = 1;
 17                 (*i).handle = handle++;
 18             }
 19             else{
 20                 Memory m;
 21                 m.handle = handle++;
 22                 m.isuesed = 1;
 23                 m.value = value;
 24                 list_memory.insert(i, m);
 25                 (*i).value -= value;
 26             }
 27             is_success = true;
 28             cout << handle - 1 << endl;
 29             break;
 30         }
 31     }
 32     if (!is_success){
 33         cout << "NULL" << endl;
 34     }
 35 }
 36 
 37 void Def(list<Memory> &list_memory){
 38     int value = 0;
 39     for (list<Memory>::iterator i = list_memory.begin(); i != list_memory.end();){
 40         if (!(*i).isuesed){
 41             value += (*i).value;
 42             (*i).handle = 0;
 43             i = list_memory.erase(i);
 44 
 45         }
 46         else{
 47             i++;
 48         }
 49 
 50     }
 51     if (value){
 52         Memory me;
 53         me.isuesed = 0;
 54         me.value = value;
 55         me.handle = 0;
 56         list_memory.push_back(me);
 57     }
 58 }
 59 
 60 void Delete(list<Memory> &list_memory,unsigned int value){
 61     bool is_success = false;
 62     for (list<Memory>::iterator i = list_memory.begin(); i != list_memory.end(); i++){
 63 
 64         if ((*i).handle == value){
 65             (*i).isuesed = 0;
 66             (*i).handle = 0;
 67             int _del_value;
 68             if (i != list_memory.begin()){
 69                 i--;
 70                 if (!(*i).isuesed){
 71                     
 72                     _del_value = (*i).value;
 73                     i = list_memory.erase(i);
 74                     (*i).value += _del_value;
 75                 }
 76                 else{
 77                     i++;
 78                 }
 79             }
 80             i++;
 81             if (i != list_memory.end() && !(*i).isuesed){
 82                 _del_value = (*i).value;
 83                 i = list_memory.erase(i);
 84                 i--;
 85                 (*i).value += _del_value;
 86             }
 87             is_success = true;
 88             break;
 89         }
 90     }
 91     if (!is_success){
 92         cout << "error" << endl;
 93     }
 94 }
 95 
 96 int main(){
 97     int n, m;
 98     while (cin >> n >> m){
 99         list<Memory> list_memory;
100         Memory me;
101         me.value = m;
102         me.isuesed = 0;
103         me.handle = 0;
104         list_memory.push_back(me);
105         static int handle = 1;
106         for (int l = 0; l < n; l++){
107             string op;
108             unsigned int value;
109             cin >> op;
110             if (op == "new"){
111                 cin >> value;
112                 New(list_memory, value,handle);
113             }
114             else if (op == "def"){
115                 
116                 Def(list_memory);
117             }
118             else if (op == "del"){
119                 cin >> value;
120                 Delete(list_memory, value);
121             }
122 
123             for (list<Memory>::iterator i = list_memory.begin(); i != list_memory.end(); i++){
124                 cout << (*i).value << ' ' << (*i).isuesed << ' ' << (*i).handle << endl;
125             }
126             cout << "---------------------分割線-------------------------------------------" << endl;
127         }
128     }
129 }
130  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved