日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

一步一步写算法(之洗牌算法)

發布時間:2023/12/15 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一步一步写算法(之洗牌算法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


【 聲明:版權全部,歡迎轉載,請勿用于商業用途。 ?聯系信箱:feixiaoxing @163.com】


?? ?撲克牌洗牌是我們生活中比較喜歡玩的一個游戲。那么我們有沒有什么辦法自己設計一個撲克牌洗牌的方法呢?在c執行庫其中有一個隨機函數rand,它能夠生成0~32767之間的隨意數。那么有沒有可能利用這么一個函數對我們撲克牌進行隨即洗牌呢?

?? ?在這里我拋磚引玉一下,談一談自己眼下已經看到的兩個算法。歡迎朋友們談一談其它的方法。

?? ?(1)全局洗牌法

?? ?過程例如以下所看到的:

?? ?a)首先生成一個數組,大小為54,初始化為1~54

?? ?b)依照索引1到54,逐步對每一張索引牌進行洗牌,首先生成一個余數 value = rand %54,那么我們的索引牌就和這個余數牌進行交換處理

?? ?c)等多索引到54結束后,一副牌就洗好了

?? ?代碼例如以下所看到的:

void get_rand_number(int array[], int length) {int index;int value;int median;if(NULL == array || 0 == length)return ;/* 每次發牌的時候隨意分配待交換的數據 */for(index = 0; index < length; index ++){value = rand() % length;median = array[index];array[index] = array[value];array[value] = median;} }


?? ?(2)局部洗牌法

?? ?上面的算法很easy,可是有一個問題,我們發現每次洗牌之后原來洗好的牌都會進行二次操作,個人認為有點說只是去,所以最好還是加以改進:

?? ?a)相同,首先我們生成一個大小為54的數組,數組排列為1~54

?? ?b)索引牌從1開始,到54結束。這一次索引牌僅僅和剩下還沒有洗的牌進行交換, value = index + rand() %(54 - index)

?? ?c)等到全部的索引牌都洗好之后,一副牌就弄好了

?? ?代碼例如以下所看到的:

void get_rand_number(int array[], int length) {int index;int value;int median;if(NULL == array || 0 == length)return ;/* 發牌的時候對于已經分配的數據不再改動 */for(index = 0; index < length; index ++){value = index + rand() % (length - index);median = array[index];array[index] = array[value];array[value] = median;} }

注: 以上兩個算法都不是我想出來的,歡迎算法的初始作者和我聯系,我會在文章中加入標記說明。



總結

以上是生活随笔為你收集整理的一步一步写算法(之洗牌算法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。