洗牌程序c语言原理,C语言经典算法 - 洗牌算法
下面是编程之家 jb51.cc 通过网络收集整理的代码片段。
编程之家小编现在分享给大家,也给大家做个参考。
说明:
洗扑克牌的原理其实与乱数排列是相同的,都是将一组数字(例如1~N)打乱重新排列,只
不过洗扑克牌多了一个花色判断的动作而已。
解法:
初学者通常会直接想到,随机产生1~N的乱数并将之存入阵列中,后来产生的乱数存入阵列
前必须先检查阵列中是否已有重复的数字,如果有这个数就不存入,再重新产生下一个数,运
气不好的话,重复的次数就会很多,程式的执行速度就很慢了,这不是一个好方法。
以1~52的乱数排列为例好了,可以将阵列先依序由1到52填入,然后使用一个回圈走访阵列,
并随机产生1~52的乱数,将产生的乱数当作索引取出阵列值,并与目前阵列走访到的值相交换,
如此就不用担心乱数重复的问题了,阵列走访完毕后,所有的数字也就重新排列了。
至于如何判断花色?这只是除法的问题而已,取商数判断花色,取余数判断数字,您可以直接
看程式比较清楚。
#include
#include
#include
#define N 52
int main(void)
{
int poker[N + 1];
int i,j,tmp,remain;
// 初始化阵列
for (i = 1; i <= N; i++)
poker[i] = i;
srand(time(0));
// 洗牌
for (i = 1; i <= N; i++)
{
j = rand() % 52+1;
tmp = poker[i];
poker[i] = poker[j];
poker[j] = tmp;
}
for (i = 1; i <= N; i++)
{
// 判断花色
switch ((poker[i] - 1) / 13)
{
case 0:
printf("桃");
break;
case 1:
printf("心");
break;
case 2:
printf("砖");
break;
case 3:
printf("梅");
break;
}
// 扑克牌数字
remain = poker[i] % 13;
switch (remain)
{
case 0:
printf("K ");
break;
case 12:
printf("Q ");
break;
case 11:
printf("J ");
break;
default:
printf("%d ",remain);
break;
}
if (i % 13 == 0)
printf("\n");
}
return 0;
}
以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
总结
以上是编程之家为你收集整理的C语言经典算法 - 洗牌算法全部内容,希望文章能够帮你解决C语言经典算法 - 洗牌算法所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
小编个人微信号 jb51ccc
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
洗牌程序c语言原理,C语言经典算法 - 洗牌算法相关推荐
- python语言原理_python语言实现
最近看了看陈儒的<Python源码剖析>,写的很好,这里简单记录下python语言实现的几个点. 1.python对象实现原理 首先说下python中的对象的实现,python中基本所有东 ...
- 心形线c语言原理,C语言打印心形(示例代码)
#include int main() { for (float y = 1.5f; y > -1.5f; y -= 0.1f) { for (float x = -1.5f; x < 1 ...
- shuffle算法c语言,C#Shuffle算法(洗牌算法、抽样算法)
Fisher-Yates Shuffle算法 1.创建一个新的list 2.随机取出当前0-list.Count其中一个数 3.把老list当前随机数位置添加到新list 4.老list删除这个数 5 ...
- 大前端开发者需要了解的基础编译原理和语言知识
转自:https://yq.aliyun.com/articles/180879 在我刚刚进入大学,从零开始学习 C 语言的时候,我就不断的从学长的口中听到一个又一个语言,比如 C++.Java.Py ...
- 共阳极数码时钟c语言程序,基于51单片机C语言数字钟程序.doc
基于51单片机C语言数字钟程序 基于51单片机C语言数字钟程序 数字电子钟的设计 一. 绪论 (一)引言 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地 ...
- 好程序员Java分享SQL语言之索引
好程序员Java分享SQL语言之索引,前言:本章我们将学习MySQL中的索引,本文将从索引的作用.索引的分类.创建索引的语法.索引的使用策略以及索引的实现原理等方面带大家了解索引. 索引的作用 索引的 ...
- 【编译原理】语言认知之Java、Python、C++快速排序三者运行效率与开发效率比较
[编译原理]语言认知之Java.Python.C++快速排序&三者运行效率与开发效率比较 一.实验目的 二.实验环境 三.实验步骤 四.快速排序程序 五.实验结果 六.总结 一.实验目的 强化 ...
- NULL 指针在不同平台下的表现引发程序报错(C 语言)
NULL 指针在不同平台下的表现引发程序报错(C 语言) 为什么有这篇 正文 1. 使用环境 2.问题描述及展示 3. 走了些弯路 4. 柳岸花明(GDB 调试) 5. 访问 NULL 指针错误背后的 ...
- c语言转换为stc程序,STC51单片机入门(C语言)
以前老资料,可继续下载参考. 目 录 第1篇 单片机KEIL开发环境 第1章 点亮LED实例与经典延时程序介绍(看不懂就从第2章动手) 1.1 51单片机最小系统与芯片引脚图 1.2 点亮LED ...
最新文章
- Nginx负载均衡集群介绍
- Linux Shell执行原理
- 撤销 git commit
- 《QML除夕烟花,代码全平台可用》
- Android 控件之RatingBar评分条(五星)自定义样式
- 玩转mini2440开发板之【制作和修改linux启动logo图片】
- 测试管理工具QC第一篇-QC安装步骤(史上最详细的图解过程)-第一篇
- vb.net word 自定义工具栏_Word双面快速简捷打印?
- CSS3动画的常见属性(CSS3)
- nlogn 求最长上升子序列 LIS
- location.href参数丢失
- 74ls20设计半加器_用74ls138设计全加器
- 计算机网络应用层1练习题
- python写邮箱系统登录_Python selenium登录163邮箱示例
- 大数据必学语言Scala(三十一):scala面向对象 特质(trait)
- 华为无线AC配置实例-华为3层ac旁挂+直接转发
- 快速入门:Slurm资源管理与作业调度系统
- 人工神经网络有哪些应用,人工神经网络包括哪些
- InvalidOptions: Requested option conflicts with current storage engine option for directoryPerDB
- android p 荣耀v10,荣耀V10和V9哪个好 区别对比分析告诉你