記錄洗牌算法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> arrbase=new List<int>(54);
            List<int> arrresult = new List<int>(54);
            //1初始化牌
            for (int i = 0; i < 54; i++)
            {
                arrbase.Add(i + 1);
                arrresult.Add(0);
                Console.WriteLine("將"+(i+1)+"放在"+i+"位置");
            }
            Console.WriteLine("初始化完畢");

            //2.隨機抽一張牌,放入B數據
            Random r=new Random();
            var count = arrbase.Count;
            for (int i = 0; i < 54; i++)
            {
                var index = r.Next(0, count);//隨機肯定想要抽牌的位置
                var tem = arrbase[index];//取出該位置上面的牌
                arrresult[i] = tem;//將該牌放置在牌堆B中.從前向後依次放置
                Console.WriteLine("將{0}放在了牌組B的{1}位置", tem, i);
                if (index != count-1) //從牌堆A隨機取的不是牌堆A的最後一張
                {
                    //將最後一個牌給 index位置
                    arrbase[index] = arrbase[count - 1];
                }
                //移除牌堆A的最後一個元素 由於這裏還要用 因此直接就用count-1代替了
                count = count - 1;
            }
            if (arrresult.Distinct().Count()==54)//數據去重以後仍是和之前大小同樣,說明全部牌都移過來了
            {
                Console.WriteLine("清洗以後的牌局:");
                foreach (var i in arrresult)
                {
                    Console.WriteLine(i);
                }
            }
            else
            {
                Console.WriteLine("出錯了!");
            }
            Console.ReadKey();
        }
    }
}
相關文章
相關標籤/搜索