给出洗牌的一个算法,并将洗好的牌存储在一个整形数组里

本文详细介绍了洗牌算法的实现过程,包括如何通过随机数生成和数组元素互换来实现洗牌效果。通过代码实例,展示了洗牌前后牌面的随机变化,确保了每种结果概率的均匀性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分析:首先54张牌分别用0到53 的数值表示并存储在一个整形数组里,数组下标代表纸牌所在的位置。接下来,遍历整个数组,在遍历过程中随机产生一个随机数,并以该随机数为下标的数组元素与当前遍历到的数组元素进行对换。时间复杂度为O(n) (注:所得到的每一种结果的概率的分母越大越好)


#include <stdio.h>
#include <time.h>
#include <stdlib.h>

void shuffle(int boke[])  //洗牌
{
  int i,r,t;
  srand((unsigned)time(NULL)); //随机数种子
  for(i=0; i<54; i++)
    {
      r=(rand()%107)/2;
      //交换
      t=boke[i];
      boke[i]=boke[r];
      boke[r]=t;
    }
}
int main()
{
  int boke[54],i;
  for(i=0;i<54;i++) //初始化纸牌
    boke[i]=i;
  printf("before shuffle:\n");
  for(i=0; i<54; i++)    //打印
      printf("%d ",boke[i]);

  shuffle(boke);     //洗牌

  printf("\nafter shuffle:\n");
  for(i=0; i<54; i++)   //打印
      printf("%d ",boke[i]);
  return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值