約瑟夫問題 C語言鏈表實現

来源:https://www.cnblogs.com/tao-zhu-forever/archive/2018/04/21/8902421.html
-Advertisement-
Play Games

1.首先,我們先來瞭解一下什麼是約瑟夫環問題: 講一個比較有意思的故事:約瑟夫是猶太軍隊的一個將軍,在反抗羅馬的起義中,他所率領的軍隊被擊潰,只剩下殘餘的部隊40餘人,他們都是寧死不屈的人,所以不願投降做叛徒。一群人表決說要死,所以用一種策略來先後殺死所有人。 於是約瑟夫建議:每次由其他兩人一起殺死 ...


1.首先,我們先來瞭解一下什麼是約瑟夫環問題:

講一個比較有意思的故事:約瑟夫是猶太軍隊的一個將軍,在反抗羅馬的起義中,他所率領的軍隊被擊潰,只剩下殘餘的部隊40餘人,他們都是寧死不屈的人,所以不願投降做叛徒。一群人表決說要死,所以用一種策略來先後殺死所有人。 
於是約瑟夫建議:每次由其他兩人一起殺死一個人,而被殺的人的先後順序是由抽簽決定的,約瑟夫有預謀地抽到了最後一簽,在殺了除了他和剩餘那個人之外的最後一人,他勸服了另外一個沒死的人投降了羅馬。

 

通俗來說就是:

按照如下規則去殺人:

  • 所有人圍成一圈
  • 順時針報數,每次報到3的人將被殺掉
  • 被殺掉的人將從房間內被移走
  • 然後從被殺掉的下一個人重新報數,繼續報3,再清除,直到剩餘一人

那麼程式實現為:

  鏈表的定義: 定義為編號即可 所以data項為int

  

typedef struct NODE{
    struct NODE *next;
    int data;
}Node,*Linklist;

 

由於是迴圈,直到最後一個人, 所有可以使用特殊的鏈表: 迴圈鏈表。 當鏈表中只剩下一個元素後,便認為完事了。 即 L->next = L;

#include <stdio.h>
#include <stdlib.h>
#include "Linklist.h"

void Print_Linklist(Linklist L)
{
    Linklist head = L;
    printf("List: ");
    while(L->next != head)
    {
        printf("%d ",L->data);
        L = L->next;
    }
    printf("%d ",L->data);
    printf("\n");
}

int main()
{
    int i;
    Linklist L;
    Linklist head;
    Linklist Out;
    L = (Node*)malloc(sizeof(Node));
    head = L;
    L->data = 1;
    L->next = head;
    for(i=2;i<=41;i++)
    {
        L->next=(Node*)malloc(sizeof(Node));
        L->next->data = i;
        L->next->next = head;
        L = L->next;
    }
    Print_Linklist(head);
    L = head;
    while(L != L->next)
    {
         for(i=1;i<2;i++)
         {
             L = L->next;
         }
         Out = L->next;
         printf("%2d號 ----> 自殺!\n",Out->data);
         L ->next = Out->next;
         L = L->next;
         free(Out);
    }
    printf("幸存者是:%d",L->data);
    return 0;
}


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 徐亮偉, 江湖人稱標桿徐。多年互聯網運維工作經驗,曾負責過大規模集群架構自動化運維管理工作。擅長Web集群架構與自動化運維,曾負責國內某大型電商運維工作。 個人博客" "徐亮偉架構師之路" "累計受益數萬人。 筆者Q:552408925、572891887 架構師群:471443208 雲計算基本概 ...
  • 001
    2018.4.21溫故而知新,可以為師矣。 在JZ2440的板子上,有GPIO控制器,這裡我打算用GPF4作為輸出。 那麼怎麼讓GPF4輸出1或者0?可以通過:①配置為輸出引腳(配置GPFCON) ②設置狀態(配置GPFDAT) 在JZ2440的板子上有CPU,裡面有R0,R1......R15寄存 ...
  • 上幾節已經大致跟大家說了在Linux端文件目錄操作的一些命令 這篇隨筆,我們繼續來學習對文件目錄的操作命令 對文件或目錄進行查找的命令 find 指定目錄下查找文件 find命令可以用來在特定目錄下查找文件,預設是需要加上查找的路徑的,如果不加路徑,則find命令會在當前目錄查找子目錄和文件 然後把 ...
  • Python基礎第二章 二進位 字元編碼 基本數據類型 數字 基本數據類型 字元串 基本數據類型 列表 基本數據類型 元組 可變、不可變數據類型和hash 基本數據類型 字典 基本數據類型 集合 二進位 二進位是計算技術中採用的一種進位。二進位數由0和1兩個數位組成,它的基數為2,進位規則是“逢二進 ...
  • 這是CentOS內核的初始設置頁面,下麵給出中文解釋及操作方法。 ...
  • CentOS 7 預設是沒有圖形化界面的,但我們很多人在習慣了 Windows 的圖形化界面之後,總是希望有一個圖形化界面從而方便我們使用,這裡介紹一下 CentOS7安裝圖形化桌面系統的方法。 ...
  • 因centos 6.x 預設openssh掃描存在漏洞,基於安全考慮,需要將openssh_5.3p1升級為最新版1、下載安裝包https://cloudflare.cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/[root@zabbix-serv ~]# ... ...
  • 安裝流程: 1.準備安裝文件: 方法1: 使用內置火狐瀏覽器訪問下載最新格式為tar.gz的壓縮包 網址:https://www.jetbrains.com/pycharm/download/previous.html 方法2: 命令行模式中輸入命令: ps:weget命令預設下載到當前文件夾下 2 ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...