C# 约瑟夫环(JosephRing)

本文介绍了如何使用C#编程语言实现约瑟夫环问题,包括顺序表、数组和单向链表三种不同的实现方式,并提供了相应的类代码示例。
摘要由CSDN通过智能技术生成

用C#写约瑟夫环
共三种实现,第一种为顺序表,第二种用数组,第三种用单向链表。

//主程序
using System;
using System.Diagnostics;

namespace JosephRing
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch sw1 = new Stopwatch();
            Stopwatch sw2 = new Stopwatch();
            Stopwatch sw3 = new Stopwatch();

            Console.WriteLine("以下为使用线性表的约瑟夫环:");
            sw1.Start();
            Joseph_ring_origin j1 = new Joseph_ring_origin(500, 1, 51);
            j1.JosephBuildAndStart();
            sw1.Stop();
            Console.WriteLine();

            Console.WriteLine("以下为使用数组的约瑟夫环:");
            sw2.Start();
            Joseph_ring_optimize j2 = new Joseph_ring_optimize(500, 1, 51);
            j2.JosephBuildAndStart();
            sw2.Stop();

            Console.WriteLine("以下为使用单向链表的约瑟夫环:");
            sw3.Start();
            Joseph_ring_link j3 = new Joseph_ring_link(500, 1, 59);
            j3.JosephBuildAndStart();
            sw3.Stop();
            Console.WriteLine();

            /*
              时间测试涉及多线程问题,C#自动分配,故仅作参考
              如需一起比较,需使用多进程
             */
            Console.WriteLine();
            Console.WriteLine("使用线性表的约瑟夫环耗时:  " + sw1.Elapsed);
            Console.WriteLine("使用数组的约瑟夫环耗时:    " + sw2.Elapsed);
            Console.WriteLine("使用单向链表的约瑟夫环耗时:" + sw3.Elapsed);
        }
    }
}

以下为三种实现方法的类

using System;
using System.Collections.Generic;
using exp3lib;

namespace JosephRing
{
    class Joseph_ring_origin
    {
        /*
          number : 参与人数
          codenumber : 开始编号
          step : 步数
         */
        private int number;
        private int codenumber;
        private int step;
        
        //构造函数,初始化数据
        public Joseph_ring_origin(int number,int codenumber,int step=1)
        {
            this.number = number;
            this.codenumber = codenumber;
            this.step = step;
        }
        

        //创建列表;开始游戏
        public void JosephBuildAndStart()
        {
            List<int> ring = new List<int>();
            int countnumber;

            for(int i=1;i<=number;i++)
            {
                ring.Add(i);
            }
            Show(ring);
            int position = codenumber - 2;

            while(number>1)
            {
                countnumber = 0;
                while(countnumber<step)
              
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值