網站首頁 編程語言 正文
1. 問題描述
佩奇有5本新書,要借給A、B、C這3位小朋友,若每人每次只能借1本,則可以有多少種不同的借法?
2. 題目分析
本題屬于數學當中常見的排列組合問題,即求從 5 個數中取 3 個不同數的排列組合的總數。 我們可以將 5 本書進行 1~5 的編號,A、B、C 3個人每次都可以從 5 本書中任選 1 本,即每人都有 5 種選擇,由于 1 本書不可能同時借給一個以上的人,因此只要這 3 個人所選書的編號不同,即為一次有效的借閱方法。
3. 算法設計
對于每個人所選書號,我們可以采用窮舉循環來實現,即從每個人可選書號(1、2、3、4、5)的范圍內進行窮舉,從而得到可行的結果。 對第 1 個人的選擇,我們可以用循環將其列出::for (a = 1; a <= 5; a++)
,同理對于第 2 個人、第 3 個人可以用同樣的方法。 由于一本書只能借給一個人,所以第 2 個人的選擇會受到第 1 個人的限制,最后一個人的選擇會受到第 2 個人的限制,即后面的選擇都是在前面選擇的前提下進行的,所以可采用循環的嵌套來解決問題。 利用循環解決問題的時候,找到循環的三要素:循環變量的初值、循環的控制條件,以及使循環趨于結束的循環變量值的改變是進行編程的關鍵。
4. 代碼實現
完整代碼??
int main() { int a, b, c = 0; //a、b、c分別用來記錄3個人所選新書編號 int cnt = 0; //用來統計借閱的方法 printf("A、B、C 三個人所選書號分別為:↓\n"); for (a = 1; a <= 5; a++) //控制A借書編號 { for (b = 1; b <= 5; b++) //控制B借書編號 { for (c = 1; c <= 5; c++) //控制C借書編號 { if ((a != b) && (a != c) && (c != b)) //控制有效借閱組合 { printf("A:%d號 B:%d號 C:%d號 | ", a, b, c); cnt++; if (cnt % 4 == 0) //打印4列在屏幕上顯示 { printf("\n"); } } } } } printf("總共有%d種有效的借閱方法\n", cnt); //輸出有效的借閱方法總數 return 0; }
運行結果??
本題的輸出結果有一個條件限制,即 3 個人所選書號各不相同,所以在輸出語句前只要用一個 if 語句 if(a!=b && a!=c && c!=b)
判斷即可。
5. 算法升級
對于原程序中的第三層 for 循環來說不管 a、b 的取值是否相同,循環都要重復進行 5 次。 如果A 和 B 所選書號相同,那么無論 C 選什么書號都是無效的借閱方法。因此在執行第 3 個循環之前可先行判定A、B 兩人的編號是否相同,進而提高程序效率。
修改后的程序在進入循環體之前首先判斷a、b的取值,如果兩者取值相同,內層循環無須重復執行5次便可結束。
完整代碼??
原文鏈接:https://blog.csdn.net/m0_63325890/article/details/123127541
相關推薦
- 2024-02-28 UNI-APP,動態設置view的背景圖片
- 2023-07-13 react 非授控組件和授控組件的區別
- 2022-03-14 idea中的子模塊無法新建class的解決方法(idea編譯沒有生成class文件)
- 2022-12-23 iOS?button響應流程圖文詳解_IOS
- 2022-08-20 Docker容器host與none網絡的使用_docker
- 2023-04-24 Numpy創建NumPy矩陣的簡單實現_python
- 2024-07-13 Spring AOP 基于注解的方式實現切面遍程
- 2022-01-11 Cookie、sessionStorage和localStorage的區別
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支