一步一步写算法(洗牌算法)[建议收藏]

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

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

一步一步写算法(洗牌算法)[建议收藏]此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“”,获取验证码。在微信里搜索“”或者“”或者微信扫描右侧二维码都可以关注本站微信公众号。

【 声明:版权所有所有,欢迎转载。不用于商业用途。

 联系我们: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;
	}
}

注意: 这两种算法都不是我想出来的。欢迎算法初次接触我的作者,我会加入在文章迹象。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/117838.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • mysql卸载步骤_系统应用怎么卸载步骤

    mysql卸载步骤_系统应用怎么卸载步骤重装卸载了一下午,很多方法都尝试了,最后终于找到一个彻底删干净的方法:1.很多大佬都提到的cmd搜索regedit注册表,打开后找到下面三个目录并删除(要是没有不用管)HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Application/MySQLHKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Application/MySQLHKEY_LOCAL_MACHIN

  • pycharm 全局搜索快捷键「建议收藏」

    pycharm 全局搜索快捷键「建议收藏」pycharm全局搜索快捷键:ctrl+shift+f如果快捷键被系统占用了,那么在pycharm中是不能使用的,我使用的win10自带的输入,这里是已经存在的快捷键,需要关闭才可以使用

  • C++中this指针的本质

    C++中this指针的本质一直以来对C++中的this不理解,只知道在构造函数中,如果构造函数的参数和类成员的名字一样的话,就可以用this指针来区分,如:this->a=a;一直以来都有这个疑问:this究竟是什么?我们明明没有定义这个this,但是我们可以直接用而编译器不会报错。今天来解决这个疑问。从刚才的代码中,我们用”this->”而不是”this.”就说明this是一个指针,而我们知道,在C、C++中,指针

  • Qt之msvc-version.conf loaded but QMAKE_MSC_VER isn‘t set[通俗易懂]

    Qt之msvc-version.conf loaded but QMAKE_MSC_VER isn‘t set[通俗易懂]最近用Qt5.10.0VS2015新建一个工程,构建时报如下错误:msvc-version.confloadedbutQMAKE_MSC_VERisn’tset解决方法:打开文件D:\Qt\Qt5.10.0\5.10.0\msvc2015\mkspecs\common\msvc-version.conf在其中添加版本QMAKE_MSC_VER=1900,如下图所

  • linux 系统查看网卡配置信息_如何查看自己电脑网卡配置

    linux 系统查看网卡配置信息_如何查看自己电脑网卡配置  Linux系统查看网卡配置,有几种方式,分述如下。方法一:ifconfig命令查看设置网卡ifconfig:查看所有活动网卡信息,能查看IP地址和子网掩码,但是不能查看网关和DNS地址),还可以临时设置某一网卡的IP地址和子网掩码。[root@cloudgw~]#ifconfigeth0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet172.19.243.202ne

    2022年10月19日
  • 解决Navicat for MySQL 连接 Mysql 8.0.11 出现1251- Client does not support authentication protocol 错误

    解决Navicat for MySQL 连接 Mysql 8.0.11 出现1251- Client does not support authentication protocol 错误今天在电脑上安装了Mysql8.0.11,然后又屁颠屁颠地安装了NavicatforMySQL,打开Navicat准备链接数据库的时候出现了如下提示:上网搜索解决方案,网上说出现这种情况的原因是:mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,解决问题方法有两种:方法…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号