操作系統 進程 學習以及思考

進程管理邏輯圖

  • 將多個程序拷貝到進程中,占用內存,如圖扇形區域,當酷狗進程需要資源的時候,會通過I/O子系統取用資源的過程中,會放棄對cpu的占用,cpu就會處理別的進程,因此提高了cpu的利用率(I/O低速,cpu高速)
  • qq想要知道鍵盤輸入的結果,他就會拜托I/O子系統去取鍵盤輸入的結果,這個時候會放棄CPU的占用,CPU會重新分配給其他應用程序。當I/O取到鍵盤輸入的數值,會把結果返回給QQ
  • 死鎖中對于資源的搶占不僅僅是cpu,也有鍵盤、鼠標、U盤等I/O資源

  • I/O低速 CPU高速?
  • 當QQ需要使用I/O獲取數據的時候,會由先前的獲得CPU狀態變成等待CPU狀態,這個過程是因為I/O阻塞從而主動放棄CPU。然后進入排隊隊列,狀態為I/O中,阻塞。
  • 因為不同的進程對資源的要求以及獲取速度的不同,有可能獲得了CPU但是狀態還是阻塞中,所以會短暫的獲取CPU然后立刻放棄CPU,進入排隊隊列。這會造成CPU的資源浪費。
  • PCB存儲的就是多進程狀態圖的狀態信息

  • 排隊,形成一個循環隊列;只有就緒狀態的進程才可以獲取cpu,處于阻塞狀態的進程無法獲取cpu
  • 阻塞狀態的成員獲得cpu之后,因為I/O狀態沒有轉備好數據,立刻放棄cpu。這個過程是低效的,應該按照進程的屬性排成兩個隊列?

  • 隊列分成兩種,就緒隊列(I/O完)和阻塞隊列(I/O),提高了CPU的利用率

進程的由來

  • 1,如果將一個程序所依賴的所有功能弄到一個進程的話,如圖所示,如果網絡功能進行網絡資源的訪問,涉及到I/O會釋放對CPU的占用,因此其余的功能,比如渲染、物理引擎計算等等也會失去CPU的占用,軟件會卡死;
  • 2,如果為軟件的不同功能都分配一個進程,每個進程實現不同的功能,多個進程會導致時空開銷大,而且存儲狀態信息的工具PCB有限,因此引入了線程的概念。
  • 3,兩個功能進程之間切換。時空開銷具體體現在上下文切換,上下文切換,是指上面涉及到的就緒、阻塞、運行狀態的轉換,如果切換過于頻繁,在挑選PCB和修改PCB的信息,時間效率會降低;cpu執行qq程序,后切換到LOL程序,在回到qq程序,這個過程會涉及到狀態信息的保存,利用棧保存當前信息,因為棧需要開辟空間,因此會帶來空間開銷。
  • 3,線程,將功能轉化為線程。解決了進程上述提到的問題。進程是線程的容器,進程和線程同時存在。
  • 4,進程和進程之間并發,線程和線程之間并發(同一個進程不同線程;不同進程的不同線程)
  • 新事物的出現,在解決舊的矛盾的同時也會引入新的矛盾

?

進程和程序的區別

  • 1,程序是靜態的,進程是動態的。程序就是代碼,但是進程會涉及到狀態的轉換,就緒、阻塞和運行之間的切換,這個過程是動態的
  • 2,進程是程序的一次執行過程。
  • 3,程序和進程不是一一對應的,即以下兩點
  • 一個程序對應多個進程-->多開?word程序打開不同的文檔
  • 一個進程對應多個程序-->UI界面進程:QQ 360?LOL

進程的特征

  • 1,并行
  • 2,異步
  • 3,動態性:狀態的轉換;存儲在PCB
  • 4,結構性:(描述,組織)?進程 =?程序+PCB;程序:指令段(程序段)和數據段
  • 5,獨立性:資源分配,給每一個進程分配的空間都是隔離的

進程的結構

編譯

  • 編譯過程中,將.c文件轉化為.o文件,將內部代碼轉化為程序段和數據段,具體轉化如下:
  • a+b -> 3+2;其中a是變量名字,在編譯的時候,所有的數據會匯聚在一起,所有的指令也會匯聚在一起。將數據存儲到數據段,指令存儲到程序段(指令段)。

鏈接

  • 將.o文件中的所有數據段放在一起,所有的程序段放在一起。然后形成exe運行程序
  • 程序運行的時候,將程序代碼從磁盤拷貝到內存中,?也就是將數據段和程序段從磁盤復制到內存中,并且創建一個pcb模板,記錄到內存中

PCB

  • 運行軟件,將程序從磁盤拷貝到內存(將其指令段和程序段拷貝到內存上)上運行的同時會創建一個PCB(檔案),PCB
  • PCB是進程存在的唯一標識
  • PCB存儲的內容:
  • 進程標識符:唯一性,進程的數字標識,數字代表程序
  • 進程的當前狀態:新建、就緒、堵塞、運行、結束
  • 進程的優先級:VIP,用于后面的程序調度
  • 代碼的入口地址:程序由磁盤拷貝到內存中,入口的地址是指拷貝到內存中的起始地址,指向內存
  • 代碼的外存地址:標識本段代碼是從磁盤哪個區域拷貝過來的,指向磁盤
  • 進入內存的時間:從磁盤拷貝到內存的完成的時間
  • 代碼段指針:指向代碼段
  • 數據段指針:指向數據段
  • 堆棧指針:CPU在不同進程之間切換,用于保存現場信息

進程的狀態與控制

?

  • 就緒:使用PCB里面的PID代表進程,使當前狀態為ready,標識就緒;使用pcb進行排隊
  • PCB :process?control?block,通過調整PCB內部參數的數值,控制不同的進程
  • 進程狀態轉換圖-目的:便于OS監控和調度
  • *進程程序運行 需要同時具備?PCB +?內存 +?CPU
  • 每種狀態擁有了哪些資源?
  • 什么時候需要狀態裝換?
  • 狀態裝換需要做什么事情?(進程的控制)
  • 1,分配(申請)?PCB +?內存 +?CPU
  • 2,回收? ? ? ? ??PCB +?內存 +?CPU
  • 3,修改PCB 中進程的當前狀態
  • 例子

  • ?點擊QQ,CPU將代碼復制到內存,并且開辟QQ_PCB,并修改當前狀態為ready,由新建狀態變成了就緒狀態;通過pcb內部代碼運行的入口地址,找到QQ程序的入口地址,cpu分配,由就緒狀態變成了運行狀態,改狀態信息為run。cpu運行一段時間就會由一個程序跳轉到另外一個程序,假設QQ占有的cpu時間到了,就會釋放cpu,cpu會到360進程,因此qq從運行狀態變成了就緒狀態。
  • QQ發消息,因為發消息需要網卡,發消息的時候會釋放CPU,由由運行狀態變成阻塞block狀態,當得到I/o請求,將阻塞狀態變成就緒狀態
  • 關閉qq程序或者異常退出,會使得qq進程終止,歸還 內存、刪除pcb,交還CPU,注意順序問題

進程之間通信?IPC(Inter?process?communication)

os實現進程之間通信?

  • 1,為什么要通信?安全性和交互性,不同進程之間創建之后,都會在內存上分配一段內存,彼此內存空間不可見(內存隔離),這個目的是為了提高安全性。但是如何在保證安全性的前提下實現進程之間交互,就需要進程通信
  • 2,通信的例子?粘貼復制,實現word和txt之間內容拷貝;天影天堂下載電影,自動啟動迅雷下載,通信的內容就是電影的鏈接;網站登錄,第三方登錄選擇QQ登錄

?

?

  • 1,共享內存 2,消息傳遞 3,管道通信
  • 最后一個是管道通信,因為os可以實現和不同進程之間的通信,因此不同進程可以通過連接通信管道,實現進程之間的通信
  • 半雙工是指每次雙方只有一個人講話,不可以同時說話

三級調度

  • 中級調度,比如使命召喚,整個游戲有100G,但是內存只有8G,游戲運行的時候,會根據游戲場景變化和人物的變化,動態切換,即將磁盤數據拷貝到內存中執行,對于執行完的數據,要不丟棄,要不復制到磁盤。解決內部不夠問題,以及提高了內存的利用率。
  • 高級調度,第一次將數據從磁盤拷貝到內存

  • ?低級調度,程序已經到達內存,cpu一個一個來執行,搶奪cpu

進程調度算法

FCFS算法 +?調度過程? first?come?first?service

  • 算法思想:先來先服務,一次運行一個程序,只有前面的程序結束之后,才會運行下一個程序
  • 調度方式:不可剝奪,非搶占(搶占cpu)。非搶占,主動放棄;搶占,是被迫放棄。按照磁盤拷貝到內存的順序,PCB形成一個隊列,按照這個隊列依次執行程序。只有前面的程序釋放,后面的程序才有機會得到cpu來執行。
  • 調度時機:一個進程結束
  • 特點 :?利長不利短,利于需要占據cpu長的程序,不利于占用cpu短的程序
  • ?? ??? ?? ? 利CPU忙,不利I/O忙;因為排隊,CPU不停歇,非常忙碌;如果io頻繁,會增加大量的I/O時間
  • ?? ??? ?? ? 不利分時、實時系統;分時:cpu在不同的進程之間切換;實時,立刻調動cpu到指定的進程執行。FCFS算法不滿足分時和實時系統以上的條件
  • 典型案例:打印機?銀行窗口

時間片輪轉算法 +?調度過程

  • 算法思想:分時間輪流獲取CPU(按照隊列的順序),循環隊列,適用于分時操作系統,每個進程運行指定的時間片長度然后釋放cpu
  • 調度方式:可剝奪,搶占的方式
  • 調度時機:時間片用完(搶占);程序結束(主動,非剝奪)
  • 程序的運行時間如何得到的??利用cpu的頻率,得到一個周期的時間 (1/n = T),然后利用計時器(計數器)不斷計數,從而得到一個時間,也就是每個進程占用執行多長時間,10ms。
  • 特點:1,時間片大小很講究,不能太大,也不能太小
  • ?? ?? ? ? 2,時間片太大,退化為FCFS
  • ?? ?? ? ? 3,時間片太小,時空開銷很大,
  • ? ? ? ? ? 4,適用于分時系統

SJF算法?短作業優先

  • 算法思想:優先選擇短作業,運行時間由程序員提供
  • 調度方式:非剝奪?非搶占
  • 調度時機:程序結束的時候;阻塞時I/O請求
  • 特點:
  • 1,利短不利長(長饑餓)
  • 2,不可以保證緊迫作業及時運行,(用戶、程序員可能提供虛假的運行時間)
  • 3,平均等待時間、平均周轉時間最少
  • 4,吞吐量很大

優先級調度算法 +?調度過程

  • 算法思想:優先級級別高的優先執行,PCB里面會存一個信息,表明優先級信息
  • 調度方式:搶占式,可剝奪式;非搶占式,非剝奪式
  • 調度時機:程序結束的時候;阻塞時(I/O請求);更高優先級進程進入隊列的時候
  • 特點
  • 1,滿足緊迫作業的要求
  • 2,特別適用于實時系統中
  • 3,動態優先級?靜態優先級
  • *優先級翻轉問題

高響應比優先算法

  • 算法思想:優先選擇響應比高的進程作業
  • 調度方式:無?主要用在調度作業中,從磁盤拷貝到內存
  • 調度時機?無
  • 特點:
  • 1,是FCFS(利長不利短)和SJF(利短不利長)的結合體,利用響應比來結合兩者,綜合利用彼此之間的優勢
  • 2,克服了饑餓兼顧了長作業,有使得短作業先運行
  • 相關概念
  • 提交時間:程序從磁盤拷貝到內存,構建完成PCB
  • 等待時間:當程序拷貝到內存之后,如果有其他程序正在占用CPU,那么就需要等待,
  • 響應比rp = (等待時間 +運行服務時間)/?運行服務時間
  • 占用CPU時間少的進程可以有限執行
  • 等待時間一定,服務時間增大,響應比越小,進程運行越靠后執行
  • 等待時間一定,服務時間減少,響應比越大,進程運行越靠前執行
  • 等待很長時間的進程也會有機會運行
  • 服務時間一定,等待時間越大,響應比越大,進程靠前執行
  • 服務時間一定,等待時間越小,響應比越小,進程靠后執行

多級反饋隊列調度算法?

  • 算法思想:FCFS +?優先級 +?時間片輪轉 (結合體? )
  • 調度方式?綜合
  • 調度時機?綜合
  • 特點
  • 1,短作業優先
  • 2,周轉時間短
  • 3,長作業也會得到處理

?例子

  • 假設QQ、360和LOL一次來處理,分成5個級別,只有一次CPU,在第一級CPU每次執行10分鐘,當QQ轉型完成之后,會在第二級排隊等待,cpu會執行360 10分鐘,360運行完10分鐘會在第二級等待,cpu執行LOL。如果第一級沒有等待程序,cpu會到第二級一次執行,第二級的時間片會比第一級的時間片長,執行方式和上面一致,直到有程序執行完退出。

甘特圖

  • 生產計劃進度圖
  • 描述多個進程之間的進度關系

調度準則介紹

1,cpu利用率? ,盡可能忙碌?FCFS

  • 11到13階段 QQ和LOL都沒有占用CPU,屬于cpu空閑
  • 空閑率 = (13 - 11)/ 30?
  • 使用率 = 1 - 空閑率?

2,吞吐量

  • 一個程序開始到結束算一個,計算單位時間內完成程序的數量。
  • SJF算法:盡可能使執行時間最短的優先執行,因此吞吐量最大

3,周轉時間

  • 結束時間到提交時間的時間差就是周轉時間
  • 平均周轉時間 = 所有進程的周轉時間 / 進程的數量
  • 帶權周轉時間 = 周轉時間 / 服務時間(運行時間)? 永遠大于1?
  • 平均帶權周轉時間 = 所有進程的帶權周轉時間 / 進程的數量

4,等待時間

  • 開始時間減去提交時間

5,服務時間(運行時間)

  • 結束時間減去開始時間

調度準則之評價調度算法

同步互斥邏輯圖?

并發性 異步性 獨立性

  • 并發性:多個進程同時執行
  • 異步性:cpu執行每個進程的代碼行數,處理邏輯不同,不具有預測性
  • 獨立性:進程之間不通信

臨界資源和臨界區

  • 臨界資源:一次只能被一個進程所使用的資源
  • 軟件層面:共享變量
  • 硬件層面:打印機 網卡 鍵盤
  • 和平精英:兩個人搶同一把槍,如何判定這把槍屬于哪個人?這個槍屬于臨界資源,需要在前面添加信號量(交通燈),信號量開始和結束的段落是臨界區,信號量使得cpu在獲取臨界資源前進行檢查,是否可以占有
  • 競爭和互斥相關
  • 同步和合作相關,體現在代碼執行的運行次序方面

互斥的硬件實現方法

互斥的軟件實現方法

單標志法

  • 令牌環網(輪流傳遞的思想),生死系于別人;對于一個變量進行操作,使用這個變量代表說話人的身份

雙標志法

  • 每個人有自己的標志
  • 但是雙方可能同時檢查對方的標志,有漏洞,雙方同時修改,導致bug,不會同時出現為true的情形,但是會出現同時為false的情形
  • 對臨界資源,競爭雙方先看對方的標志位,如果對方沒有對臨界資源的搶占,就自己對臨界資源進行搶占,并且更新標志位
  • 比如A和B搶奪資源,A的標志位為flag,B的標志位為flag;flag為true表示占有資源,flag為false,表示不占有資源。A在對臨界資源的搶奪之前,會看B的標志位,如果為true,表明B占有資源,A就不可以搶占資源,如果為false,則搶占資源,并修改標志位,將自己的標志位修改為true

雙標志后檢查法

  • 基于雙標志先檢查法的優化,因為雙方太謙讓而導致的bug
  • 交換了兩行代碼的先后順序
  • 先申明自己要搶資源,但是會導致無限等待和饑餓問題

peterson算法

  • 真正實現互斥
  • 引入一個變量

信號量的由來

  • 信號量使cpu在進入臨界區之前停下來
  • 統一API,p和v操作;p是等待,v是釋放的意思

信號量的工作原理

偽代碼

信號量實現同步

  • 初始的時候,將信號量設為0,當P0進程執行的時候,P(S),本質上是wait(s),s.value-1小于0,進入等待
  • cpu執行P1進程,V(s)本質上是signal(s),喚醒P0進程,實現了P1進程優先在P0進程之前執行,因此使用信號量實現了進程之間的同步操作

信號量實現互斥

  • cpu先執行P0,后執行P1,不會產生互斥現象
  • cpu先執行P1,后執行P0,不會產生互斥現象
  • cpu先執行P0,期間執行P1,能達到互斥
  • cpu先執行P1,期間執行P0,能達到互斥

同步互斥小口訣

  • 畫圖理解題目
  • 判斷題目類型
  • 分析進程數目 填寫進程模板
  • 補充基本代碼(偽代碼)
  • 補充PV代碼
  • 檢查調整代碼

注意事項

  • 代碼是一步一步寫出來的,代碼是反復調整寫出來的
  • 60%是生產者和消費者模型
  • 30%是讀者和寫者的模型

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446765.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446765.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446765.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android Glide圖片加載框架(二)源碼解析之with()

文章目錄一、前言二、如何閱讀源碼三、源碼解析1、with()Android Glide圖片加載框架系列文章 Android Glide圖片加載框架(一)基本用法 Android Glide圖片加載框架(二)源碼解析之with() Android Glide圖片加載框架(二…

codeforces 1A-C語言解題報告

1A題目網址 題目解析 1.使用axa面積的方塊去鋪滿n*m面積的廣場,方塊之間可以覆蓋,可以比廣場面積大,求最小使用的方塊數目 2.因為可以覆蓋,所以求取每一邊(n或m)能夠鋪多少的a,即為求取n/a向上取整,up(n/a)(na-1)/a,再把它們乘起來 number((na-1)/a)*((ma-1)/a); 3.因為有很…

計算機操作系統生產者和消費者模型的簡單介紹

同步互斥小口訣 畫圖理解題目判斷題目類型分析進程數目 填寫進程模板補充基本代碼(偽代碼)補充PV代碼檢查調整代碼 注意事項 代碼是一步一步寫出來的,代碼是反復調整寫出來的60%是生產者和消費者模型30%是讀者和寫者的模型 生產者和消費者 例子1 媽媽每次放放一…

Android Glide圖片加載框架(二)源碼解析之load()

文章目錄一、前言二、源碼分析1、load()Android Glide圖片加載框架系列文章 Android Glide圖片加載框架(一)基本用法 Android Glide圖片加載框架(二)源碼解析之with() Android Glide圖片加載框架(二)源碼…

codeforces 231A-C語言解題報告

231A題目網址 題目解析 1.輸入比賽的題目,每一道題3個人的解題狀況(0或1),輸出總的解答題目(每一個題至少有2個,記1次) 2.在for循環中去錄入每道題的解答狀況 3.因為有題目解答的計算,所以直接用原始的解答狀況去計算 if(result[0]result[1]result[2]3) { count; } 知識點 …

英語一段落排序題技巧

總述 1.做此題不用通篇理解,找第一句和最后一句,理清楚里面的邏輯即可 首段 1.使用特殊疑問句提出問題,符合首段特點 連貫詞 1.in one case…in another case 兩個段落連在一起 2.some…others 隱式:most sites等同于others 邏輯 1.總分關系 調查–地面調查

計算機操作系統讀者和寫者模型的簡單介紹以及思考

讀者和寫者 讀寫兩組進程,共享一個文件,多個讀者可以同時訪問文件,多個寫者不可以同時訪問文件,寫者和讀者也不可以同時訪問文件共享讀;獨占寫特征:1,資源被誰占有;2,寫者改變資源,…

Android Glide圖片加載框架(二)源碼解析之into()

文章目錄一、前言二、源碼解析1、into(ImageView)2、GlideContext.buildImageViewTarget()3、RequestBuilder.into(Target,RequestListener,RequestOptions);4、RequestBuilder.buildRequest()5、SingleRequest.obtain()6、isEquivalentTo()、isSkipMemoryCacheWithCompletePre…

codeforces 158A-C語言解題報告

158A題目網址 題目解析 1.輸入n個選手,和第k個參考選手 再輸入每一個選手的比賽成績 2.輸出比賽成績>第k個選手的入選人數 3.n,k都是從1開始計算的 4.因為要比較所有的選手與第k個選手,所以使用數組,而且要使用兩個循環(第一個輸入數據,第二個比較成績) 5.不要忘記scanf都…

通過字符串的方式讀取文件的內容

代碼 std::ifstream file("1.txt");std::stringstream data;data << file.rdbuf();printf(data.str().c_str());file.close(); 頭文件 #include <cstdio> #include <cstdlib> #include <fstream> #include <sstream>

2014年考研英語一翻譯知識點

題目講解網址 總結 1.做翻譯題,不用看句子前后的地方,直接看要翻譯的部分 2.多根據語境去翻譯 3.如果是不認識的單詞,一般都是我們平常經常使用/說的詞的代替高級詞 題目句子 It is also the reason why when we try to describe music with words, all wecan do is articul…

Android Glide圖片加載框架(三)緩存機制

文章目錄一、緩存簡介二、緩存用法內存緩存方式磁盤緩存方式三、緩存KEY四、內存緩存內存緩存流程五、磁盤緩存磁盤緩存流程Android Glide圖片加載框架系列文章 Android Glide圖片加載框架&#xff08;一&#xff09;基本用法 Android Glide圖片加載框架&#xff08;二&#…

計算機操作系統 死鎖問題

概念 條件是基礎&#xff0c;在一定的原因下&#xff0c;產生結果死鎖三胞胎 死鎖 僵持&#xff0c;消耗時間&#xff0c;雙方都占用了部分資源&#xff0c;不釋放活鎖 雙方互相謙讓&#xff0c;都不占用資源饑餓 謙讓的一方一直等待&#xff0c;無法占有資源&#xff0c;導致…

C++ 力扣劍指Offer16-數值的整數次方

題目詳情 /* * 實現函數double Power(double base, int exponent)&#xff0c; * 求base的exponent次方。不得使用庫函數&#xff0c;同時不需要考慮大數問題。示例 1: 輸入: 2.00000, 10 輸出: 1024.00000示例 2: 輸入: 2.10000, 3 輸出: 9.26100 * 示例 3: 輸入: 2.00000, -…

Android Glide圖片加載框架(四)回調與監聽

文章目錄Android Glide圖片加載框架系列文章 Android Glide圖片加載框架&#xff08;一&#xff09;基本用法 Android Glide圖片加載框架&#xff08;二&#xff09;源碼解析之with() Android Glide圖片加載框架&#xff08;二&#xff09;源碼解析之load() Android Glide圖…

算法章節 數組、鏈表、棧、隊列

數組 概念與特性 1&#xff0c;數組是線性表&#xff0c;用一組連續的內存空間存儲?組具有相同類型的數據 2&#xff0c;最大的特性是?持按照下標O(1)時間復雜度內快速訪問數組元素 3&#xff0c;?維數組尋址公式&#xff1a;a[i]_addr base_addr i * data_type_size 操作…

武忠祥.高等數學.基礎課-第一章函數 極限 連續P10

sin(1/x) 詳細解析網址 1.圖像 2.極限 x–>0時,函數極限不存在 sin2x 詳細作圖網址 1.圖像 2.周期為Π f(x)周期為T,f(axb)周期為T/|a| 所以sinx周期為2Π,sin2x周期為2Π/2Π |sinx| 詳細講解網址 1.圖像 2.周期:Π 3.絕對值 &#xff08;1&#xff09;y|sinx|的圖…

Java命令:jstat — 查看JVM的GC信息

文章目錄一、簡介二、常用命令1、jstat -class pid : class loader行為統計2、jstat -compiler pid : JIT編譯器行為統計3、jstat -gc pid 5000 20 : 垃圾回收堆行為統計4、jstat -gccapacity pid 5000 20 : 堆內存統計5、jstat -gcutil pid 5000 20 : 總結垃圾回收統計6、jsta…

算法章節 遞歸、排序、?分查找

遞歸 概念與特性函數調?函數?身的編程?式叫做遞歸&#xff0c;調?為”遞“&#xff0c;返回為”歸“三個條件1. ?個問題的解可以分解為多個?問題的解&#xff1b; 2. 分解之后的?問題&#xff0c;除了數據規模不同&#xff0c;求解思路跟原問題相同&#xff1b; 3. 存在…

codeforces 50A-C語言解題報告

50A題目網址 解題報告-others 題目解析 1.輸入n x m大小的木板,使用21大小的多米諾去填滿,求最多的多米諾數目 2.通過分析把木板分為奇數和偶數的情況 1)有一邊是偶數的情況: 使用2去填滿 2)兩個邊都是奇數 奇數-1偶數 還是讓木板的(奇數-1)邊去和2平行,再加上 (m-1)/2(n/1)…