程序切換需要注意哪些問題

2021-06-09 05:59:19 字數 2583 閱讀 8299

1、程序切換需要注意哪些問題?

儲存處理器pc暫存器的值到被中止程序的私有堆疊;      儲存處理器psw暫存器的值到被中止程序的私有堆疊;    儲存處理器sp暫存器的值到被中止程序的程序控制塊;

儲存處理器其他暫存器的值到被中止程序的私有堆疊;     自待執行程序的程序控制塊取sp值並存入處理器的暫存器sp;    自待執行程序的私有堆疊恢復處理器各暫存器的值;

自待執行程序的私有堆疊中彈出psw值並送入處理器的psw;     自待執行程序的私有堆疊中彈出pc值並送入處理器的pc。

2、輸入乙個公升序陣列,然後在陣列中快速尋找兩個數字,其和等於乙個給定的值。

這個程式設計之美上面有這個題目的,很簡單的,用兩個指標乙個指向陣列前面,乙個指向陣列的後面,遍歷一遍就可以了。

3、有乙個名人和很多平民在一塊,平民都認識這個名人,但是這個名人不認識任何乙個平民,任意兩個平民之間是否認識是未知的,請設計乙個演算法,快速找個這個人中的那個名人。  已知已經實現了乙個函式  bool know(int a,int b) 這個函式返回true的時候,表明a認識b,返回false的時候表明a不認識b。

思路:首先將n個人分為n/2組,每一組有2個人,然後每個組的兩個人呼叫這個know函式,假設為know(a,b),返回true的時候說明a認識b,則a肯定不是名人,a可以排除掉了,依次類推,每個組都呼叫這個函式依次,那麼n個人中就有n/2個人被排除掉了,資料規模將為n/2。同理在剩下的n/2個人中在使用這個方法,那麼規模就會將為n/4,這樣所有的遍歷次數為n/2+n/4+n/8+........ 這個乙個等比數列,時間複雜度為o(n)。

4、有一類陣列,例如書序[1,2,3,4,6,8,9,4,8,11,18,19,100] 前半部分是是乙個遞增陣列,後面乙個還是遞增陣列,但整個陣列不是遞增陣列,那麼怎麼最快的找出其中乙個數?

[cpp]view plain

copy

print?

#include 

using

namespace std;  

int binary_search(int* a, int low, int high, int goal)    //二分查詢

return -1;  

}  void getnum(int *a, int len, int goal)  

if(a[i] >= goal)          //對前面陣列進行二分查詢

if(a[i+1] <= goal)         //對後面陣列進行二分查詢

}  int main(void)  

;  int len = 13, goal = 4;  

getnum(a,len,goal);  

return 0;  

}  

#include using namespace std;

int binary_search(int* a, int low, int high, int goal) //二分查詢

return -1;

}void getnum(int *a, int len, int goal)

if(a[i] >= goal) //對前面陣列進行二分查詢

if(a[i+1] <= goal) //對後面陣列進行二分查詢 }

int main(void)

; int len = 13, goal = 4;

getnum(a,len,goal);

return 0;

}

5、判斷乙個自然數是否是某個數的平方。當然不能使用開方運算。

方法1:

遍歷從1到n的數字,求取平方並和n進行比較。

如果平方小於n,則繼續遍歷;如果等於n,則成功退出;如果大於n,則失敗退出。

複雜度為o(n^0.5)。

方法2:

使用二分查詢法,對1到n之間的數字進行判斷。

複雜度為o(log n)。

方法3:

由於(n+1)^2

=n^2 + 2n + 1,

= ...

= 1 + (2*1 + 1) + (2*2 + 1) + ... + (2*n + 1)

注意到這些項構成了等差數列(每項之間相差2)。

所以我們可以比較 n-1, n - 1 - 3, n - 1 - 3 - 5 ... 和0的關係。

如果大於0,則繼續減;如果等於0,則成功退出;如果小於 0,則失敗退出。

複雜度為o(n^0.5)。不過方法3中利用加減法替換掉了方法1中的乘法,所以速度會更快些。

例如:3^2 = 9 = 1 + 2*1+1 + 2*2+1 = 1 + 3 + 5

4^2 = 16 = 1 + 2*1 + 1 + 2*2+1  + 2*3+1

[cpp]view plain

copy

print?

int square(int n)  

if( n == 0 )        //是某個數的平方

return 1;  

else

//不是某個數的平方

return 0;  

}  

報考NPDP,需要注意哪些問題?

產品經理國際資格認證,new product development professional npdp 由美國產品開發與管理協會 pdma 所發起,是國際公認的唯一的新產品開發專業認證,集理論 方法與實踐為一體的全方位知識體系,為公司組織層級進行規劃 決策 執行提供良好的方法體系支撐。國內自201...

選擇數控刀具需要注意哪些問題?

選擇數控刀具需要注意哪些問題?無論選擇什麼刀具首先要了解的是 被加工件的材質是什麼?用什麼工具機加工?精加工還是粗加工?有無圖紙要求?一 車刀 所有車刀都需要先了解 刀方多少?壓緊方式?安裝什麼刀片?1 外圓車刀 要求刀具的主偏角為多少度?有沒有圖紙要求?加工的材料是什麼?有沒有硬度要求?2 內孔車...

選擇IP時需要注意哪些問題

大資料時代,企業的發展離不開資料的支援,企業通過爬蟲採集獲取使用者 競爭對手等資料資訊,對獲取的資料進行分析,制定適合自己的營銷方案。而資料採集過程中少不了 ip的使用,雖然現在提供 ip服務的提供商很多,但是想要選擇合適的 ip,在選擇的時候還是要考慮到一些因素。1 首先要看一下 ip的數量 畢竟...