網站首頁 編程語言 正文
1、問題描述:
? ? ? ?有n個人圍坐一圈,現從第s個人開始報數,數到m的人出列,接著從出列的下一個人開始重新報數,數到m的人又出列.如此下去,直到所有人都出列為止.試設計確定他們出列次序序列的程序
2、算法步驟:
????????1、確定存儲結構:n個人圍成一圈,故使用循環單鏈表來存儲序號
????????2、算法實現:
該問題共n、m、s三個未知量,所以可以通過三個循環來實現,第一個循環用來確定最開始第一個報數的人的指針位置(單鏈表的頭節點指針指向第s個人),第二個循環用來控制輸出序號的次數(共n次),第三個循環用來數數(每一次循環使指針移動m次)
3、實現源代碼:
# include <stdio.h> # include <malloc.h> typedef struct Node { int number; struct Node * pNext; }NODE, *PNODE; PNODE creat_list(int n); int main (void) { int n,m,s; printf("約瑟夫環問題:\n"); printf("設有n(編號為“0 1 2 3 .....n-1 n”)個人圍坐一圈,現從第s個人開始報數,數到m的人出列,\n求最后的出列順序。\n"); printf("請設置n, s, m :\n"); printf("n = "); scanf("%d", &n); printf("s = "); scanf("%d", &s); printf("m = "); scanf("%d", &m); //問題引導提示代碼段 PNODE pHead = NULL; pHead = creat_list(n); pHead->number = 1; //創建單鏈表 PNODE p = pHead; //定義頭指針 int i,j,k; //定義循環參數 for(j = 1; j < s; j++) { p = p->pNext; } //第一個循環確定第一個報數的人在循環單鏈表中的位置 for(i = 1; i <= n; i++) //外部循環代表遍歷到最后一個所需要的循環次數 { for(k = 1; k < m; ) //內部循環代表遍歷出列的人 { if(p -> pNext -> number != 0) { p = p -> pNext; k++; } else { p = p -> pNext; } } printf("%d ",p -> number); p -> number = 0; do { p = p -> pNext; }while(p -> number == 0); } printf("\n"); return 0; } PNODE creat_list(int n) //單鏈表的創建 { PNODE pHead = (PNODE)malloc(sizeof(NODE)); PNODE pTail = pHead; int i; for(i = 2; i <= n; i++) { PNODE pNew = (PNODE)malloc(sizeof(NODE)); pNew->number = i; pTail->pNext = pNew; pNew->pNext = pHead; pTail = pNew; } return pHead; }
原文鏈接:https://blog.csdn.net/weixin_55040659/article/details/122246110
- 上一篇:C++遞歸實現選擇排序算法_C 語言
- 下一篇:C++存儲方案和動態分配_C 語言
相關推薦
- 2022-06-25 EF?Core的CRUD(增刪改查)基本操作_實用技巧
- 2022-05-12 在pycharm中設置快速創建
- 2022-09-08 Pytorch中expand()的使用(擴展某個維度)_python
- 2022-04-24 .NET?CORE?鑒權的實現示例_實用技巧
- 2022-06-14 C語言詳解冒泡排序實現_C 語言
- 2022-06-19 Python函數進階之迭代器的原理與使用詳解_python
- 2022-07-02 C#并行編程之Task同步機制_C#教程
- 2021-12-29 CentOS系統rpm安裝Nginx和配置_nginx
- 最近更新
-
- 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同步修改后的遠程分支