约瑟夫环_unity

/**************************************************************************

Author: 

Date:[]

Description:约瑟夫环,n个人围成一个圈,从1开始报数,第m个人出局,下一个人继续报数,直到最后一个人

**************************************************************************/


using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;

public class JosephProblem : MonoBehaviour
{
    public Data data;

    /// <summary>
    /// 源数据列表
    /// </summary>
    public List<int> sourceList;
    /// <summary>
    /// 结果数据列表
    /// </summary>
    public List<int> resultList;

    public Text duiLie;
    public Text chuJu;

    public InputField TotalCountInputField;
    public InputField StartInputField;
    public InputField SelectedInputField;

    void Init()
    {
        sourceList = new List<int>();
        resultList = new List<int>();
        data.TotalCount =int.Parse( TotalCountInputField.text);
        data.Start = int.Parse(StartInputField.text);
        data.Selected = int.Parse(SelectedInputField.text);
        for (int i = 0; i < data.TotalCount; i++)
        {
            sourceList.Add(i + 1);
        }
    }

    public void Do()
    {
        StopAllCoroutines();
        Init();
        StartCoroutine(DoWork());
    }

    public IEnumerator DoWork()
    {
        //列表的角标,用于操作源数据列表中的数据
        int index = data.Start - 1;
        //计数,当计到Selected的值时,出列一个数,然后重新开始计数
        int count = 1;

        while (sourceList.Count > 0)
        {
            if (count % data.Selected == 0)
            {

                resultList.Add(sourceList[index]);
                sourceList.Remove(sourceList[index]);
                duiLie.text = string.Join(",", sourceList.ConvertAll<string>(x => x.ToString()).ToArray());
                chuJu.text = string.Join(",", resultList.ConvertAll<string>(x => x.ToString()).ToArray());

                //this.ShowSourecData();
                //this.ShowResultData();

                count = 1;
            }
            else
            {
                count++;
                index++;
            }

            //当循环完源数据列表中的所有数据时,重头开始再次循环
            if (index == sourceList.Count)
                index = 0;

            yield return null;
        }
    }
}
[System.Serializable]
public class Data
{
    /// <summary>
    /// 总数
    /// </summary>
    public int TotalCount;

    /// <summary>
    /// 从第几个数开始
    /// </summary>
    public int Start;

    /// <summary>
    /// 第几个数出列
    /// </summary>
    public int Selected;
}
项目工程下载地址:http://download.youkuaiyun.com/download/qq_34845917/10206363
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值