解法:

初学者通常会直接想到,随机产生1~N的乱数并将之存入阵列中,后来产生的乱数存入阵列前必须先检查阵列中是否已有重复的数字,如果有这个数字就不存入,在重新产生下一个数。运气不好的话,重复的次数就会很多,程序的执行速度就很慢了,这不是一个好办法。

以1~52的乱数排列为例好了,可以将阵列先依序由1到52填入,然后使用一个回圈走访阵列,并随机产生1~52的乱数,将产生的乱数当作索引取出阵列值,并与目前阵列走访到的值相交换,就不用担心乱数重复的问题了,阵列走访完毕后,所有的数字也就重新排列了。

以扑克牌为例,如何判断花色?这是除法问题。求商数判断花色,求余数判断数字。

自己写的,一开始是打算写成一个适用性比较强的乱数排序例子,可是又要兼顾扑克牌的特点。所以函数的起名已经参数设计的并不是太合理。

/*
*内容: 洗扑克牌 (乱数排序)
*时间: 2/13/2013
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 52
void initNumber(int array[], int arrayLength)//初始化数组
{
for (int i = 1; i < arrayLength; ++i)
{
array[i] = i;
}
}
void randomSort(int array[], int minValue, int maxValue)//将数组进行乱数排序
{
srand(time(0));
int temp = 0;
int num = 0;
for (int i = 1; i < maxValue; ++i)
{
num = rand()%(maxValue-minValue+1) + minValue;//产生该范围的随机数
temp = array[i];
array[i] = array[num];
array[num] = temp;
}
}
void printResult(int array[], int arrayLength)
{
int op = 0;//用来储存 花色
int number = 0;//用来储存 数字
for (int i = 1; i < arrayLength; ++i)
{
op = (array[i]-1) /13;//对花色进行判断
switch (op)
{
case 0 : printf ("\t红心"); break;
case 1 : printf ("\t方块"); break;
case 2 : printf ("\t梅花"); break;
case 3 : printf ("\t黑桃"); break;
default: break;
}
number = array[i]%13;//对数字进行判断
switch (number)
{
case 11 : printf (" J"); break;
case 12 : printf (" Q"); break;
case 0  : printf (" K"); break;
default : printf ("%2d ", number); break;
}
if ( (i%4) == 0)//换行
{
printf ("\n");
}
}
printf ("\n\n");
}
int main()
{
int number[MAX+1] = {0};//创建扑克牌
initNumber(number, MAX+1);//初始化扑克牌 因为扑克牌没有0,为方便,故将数组长度+1
randomSort(number, 1, MAX); //将扑克牌进行排序
printResult(number, MAX+1);
return 1;
}

洗扑克牌 (乱数排序)相关推荐

  1. C语言实现-“洗 扑克牌”程序 算法(详解)

    1.问题引入 我们对"扑克牌"这个词并不陌生,作为一种娱乐活动被大众所熟知.那么,每一局结束后,除了人工洗牌,我们接触到的软件.小程序中如何实现的"洗牌"呢?其 ...

  2. 算法 洗扑克牌(乱数排列)

    From Gossip@caterpillar Algorithm Gossip: 洗扑克牌(乱数排列) 说明 洗扑克牌的原理其实与乱数排列是相同的,都是将一组数字(例如1-N)打乱重新排列,只不过洗 ...

  3. C++经典算法题-洗扑克牌(乱数排列)

    24.Algorithm Gossip: 洗扑克牌(乱数排列) 说明 洗扑克牌的原理其实与乱数排列是相同的,都是将一组数字(例如1-N)打乱重新排列,只不过洗扑克牌多了一个花色判断的动作而已. 解法 ...

  4. 洗扑克牌(乱数排列)(c/python略)

    洗扑克牌的原理其实与乱数排列是相同的,都是将一组数字(例如1-N)打乱重新排列,只不过洗扑克牌多了一个花色判断的动作而已. 原理:以1-52的乱数排列为例好了,可以将阵列先依序由1到52填入,然后使用 ...

  5. 扑克洗牌(乱数排列)

    /** * 洗扑克牌(乱数排列) * @author huangbiao86 */ public class Card { public static void main(String[] args) ...

  6. 用JAVA实现简单的扑克牌洗牌发牌并排序

    用JAVA实现简单的扑克牌洗牌发牌并排序,首先写代码之前需要明确需要分哪些步骤: 创建一个HashMap集合对象 创建一个ArrayList集合对象 生成一副扑克牌 将扑克牌按照键值关系添加到Hash ...

  7. 【游戏中的算法】洗扑克牌算法

    文章目录 一.洗扑克牌算法 二.C/C++实现方法: 三.JavaScript实现效果图: 1.初始页面 和 clear 后: 2.初始化扑克牌: 3.洗扑克牌后: 四.JS代码和54张扑克牌下载地址 ...

  8. Lorem ipsum乱数假文学习笔记

    目录 1. 乱数假文介绍 2. 在vsCode中使用乱数假文 3. 自动生成乱数假文网站汇总 3.1 中文Lorem ipsum产生器 3.1 英文Lorem ipsum产生器 1. 乱数假文介绍: ...

  9. flash中乱数排列(随机数)方法

    介绍两种乱数排列的方法: 在1到32中选取10个随机数,要求这10个随机数必须是不重复的. 方法1:在1到32中选取1个随机数后,把它与前面选取的所有数进行比较,如果和其中一个相同,那么就重新选择:如 ...

最新文章

  1. 合成/聚合原则: 桥接模式
  2. Java LocalDate类| isLeapYear()方法与示例
  3. 一些关于图论和二叉树的
  4. POJ 1655:Balancing Act
  5. 开了个会:破局企业云通信,华为加速 Buff 开发者!
  6. 中小企业用户如何选择简单进销存软件?
  7. c语言中缺少函数标题,error C2332: “struct”: 缺少标记名
  8. R语言数学建模(1):Regression analysis
  9. 用户福利-ArchSummit全球架构师峰会 优惠码
  10. JavaScript大体学习思路
  11. Vue 搭建一个前端项目
  12. 手机如何拍出中背景模糊虚化的拍摄技巧
  13. 系统结构图、程序流程图、数据流图
  14. 静态词向量预训练模型
  15. 流水灯实验报告c语言,PLC流水灯实验报告.pdf
  16. Spring Cloud Alibaba (三)Sentinel 简单介绍和使用
  17. 【ATS】苹果传输数据ATS认证究竟是什么?
  18. Transformer是如何进军点云学习领域的?
  19. 4大国外自由职业者项目外包网站
  20. python数据可视化——画板

热门文章

  1. Elasticsearch:创建一个 Elasticsearch Ingest 插件
  2. HTML 常用特殊符号
  3. 计算机中汉字的顺序有什么排列,汉字演变过程的时间排序是什么?
  4. Redis命令INCRBY和INCR区别
  5. c语言中\n,\t,\r,\b的用法和区别
  6. GitHub 热门项目:PyTorch 资源大全
  7. 基于STM32+OV7670+TFT显示(升级篇:将摄像头采集到的画面显示在TFT屏)
  8. 如何在转换CAD图纸的时候更改背景颜色?
  9. GYM 100827 A.Runes(水~)
  10. Redis-5.0.5集群配置