程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 約瑟夫環C#解決方法

約瑟夫環C#解決方法

編輯:C#入門知識

/*約瑟夫環
(問題描述)
約瑟夫問題的一種描述是:編號為1,2,......n,的n個人按順時針方向圍坐一圈,每個人持有一個密碼(正整數)。一開始任意選
一個正整數作為報數的上限值m,從第一個人開始按順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新
的m值,從他在順時針方向下一個人開始從1報數,如此下去,直至所有人全部出列為止。試設計一個程序求出出列順序。
(基本要求)
利用單向循環鏈表存儲結構模擬此過程,按照出列順序印出個人的編號。
(測試數據)
m的初值為20;n=7,7個人的密碼依次為:3,1,7,2,4,8,4,首先m為6(正確的出列順序應為6,1,4,7,2,3,5)。

下面是我的解決方法:
根據問題所描述的,這是個環問題,我們可以先模擬一個環.
聲明:我這裡是用雙向鏈表的,雖然對這個問題沒太大意義,但我還是保留為雙向的,因為我在考慮這個問題可以衍生出很多其它問題來,只為我自己所用而以。呵呵……為了性能,而且只是解決這一個問題,你可以改成單向鏈表。

 public class Circle
    {
        public class Node
        {
            private Node preNode;
            private Node nextNode;

            private int id;
            private uint password;

            public Node PreNode
            {
                get {
                    return preNode;
                }
                set {
                    preNode = value;
                }
            }

            public Node NextNode {
                get {
                    return nextNode;
                }
                set {
                    nextNode = value;
                }
            }

            public int ID
            {
                get {
                    return id;
                }
                set {
                    id = value;
                }
            }

            public uint Password
            {
                get {
                    return password;
                }
                set {
                    password = value;
                }
            }
           
        }
        private Node firstNode = null;
        private Node lastNode=null;
        private Node nextNode = null;
        private int count = 0;
       

        public int Count
        {
            get {
                return count;
            }
            set {
                count = value;
            }
        }

        public Circle()
        {
        
        }

        public void Add(int id,uint password)
        {
            count++;
             No

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved