關於fork有意思的兩道題目

2021-09-07 08:34:59 字數 788 閱讀 9812

#include

#include

#include

intmain()

}

這道問題並不難,最快的想法就是2+4+8+16+32,因為第一層的printf會有兩個程序列印,第二層會增加到4個,以此往下,就得出62行。

#include

intmain()

讓我們仍然採用上題的演算法,使用乙個佇列:

首先,將主程序產生子程序的位置放到佇列中:

queue = "

a b c e ";

sum = 0

;我們從佇列中取首元素a,我們分析a處產生的程序,發現它會在b, c, e三處產生子程序,我們把這三個元素插入到佇列中,並將sum+1

。queue = "

b c e b c e

"sum ++;

然後,我們從佇列中取出首元素b,b處產生的子程序稍稍不一樣,因為子程序中b所代表的fork()返回值為0,因此c得不到執行,而d會得到執行。因此,b處產生的子程序會執行d, e,將這兩個元素送入佇列,sum++:

queue = "

c e b c e d e

"sum ++;

下面,我們取首元素c,分析發現,c處產生的程序會執行d, e,送入佇列並且sum++:

queue = "

e b c e d e d e

"sum ++;

同上一題一樣,依次這樣執行,遇到e則沒有元素入佇列,直到最後隊列為空,sum就是總共產生的程序個數。

兩道有意思的題目

碰到兩道有意思的題目,記錄一下。題目一 問,對於任意乙個正整數,是否存在乙個它的倍數全是由1和0組成?例如 1 1 1 2 5 10 2的5倍是10,10由1和0組成 3 37 111 3 的 37 倍是111,111 全部由1組成 4 25 100 4 的 25 倍是100,100 由1和0組成 ...

一道很有意思的題目

先列出 然後再開始解析 include stdafx.h include using namespace std class a class b public a void seta a data,int idx int tmain int argc,tchar argv for int i 0 i...

有意思的題目2

http狀態碼 cdn 內容分發網路是一種透過網際網路互相連線的電腦網路系統,提供高效能 可擴充套件性 及低成本的網路將內容傳遞給使用者。tcp協議是面向連線的,而http是無狀態的,面向連線和無狀態怎麼感覺好像有點矛盾呢?不矛盾,乙個是面向鏈結的,乙個是無連線的。面向鏈結的可靠些,無連線的就不那麼...