一个很小的洗牌算法
来源:互联网 发布:开淘宝代购护肤品店 编辑:程序博客网 时间:2024/05/08 05:31
根据排列组合的思想 :54张牌共有54!种不同排列,据此,可安排随机数范围从而定位,然后和固定的空间交换,代码如下:
#include <stdio.h>#include <stdlib.h>#include <time.h>void swap(int *x, int *y){ if ( x != y ) { *x = *x ^ *y; *y = *x ^ *y; *x = *x ^ *y; }}int main(void){ int i, j, card[54];#define TEST for ( i = 1; i <= 54; i++ ) { card[i-1] = i; } srand(time(NULL)); for ( i = 54; i > 0; i-- ) { j = rand() % i; swap(&card[i-1], &card[j]); }#ifdef TEST for ( i = 0; i < 54; i++ ) printf("%d\t", card[i]); printf("\n");#endif return 0;}
函数swap的指针参数x和y如果指向同样的空间,则不能继续计算,因为这样值会被置0.rand函数根据srand函数的种子产生[ 0 - RAND_MAX ]的随机数,所以rand() % i 生成 [ 0 - i-1 ]的随机数。
- 一个很小的洗牌算法
- 洗牌的一个算法
- 一个高效的洗牌算法分析
- 设计一个随机洗牌的算法
- 一个很小的字符串类
- 洗牌算法的学问
- 洗牌算法的研究
- 错误的洗牌算法
- 简易的洗牌算法
- 洗牌算法:随机打乱一个数组的顺序
- 一个简单的扑克牌洗牌算法|无重复
- 洗牌算法:随机打乱一个数组的顺序
- 洗牌算法:随机打乱一个数组的顺序
- 一个随机排布的面试题(洗牌算法?)
- libsvm 使用的一个很小的例子
- 很小很怪的一个java程序
- 如何写一个很小的 CSS 文件
- 如何写一个很小的 CSS 文件
- aspnet_Membership_CreateUser 为什么活动事务不为0的时候不开始事务
- 跨服务器访问数据
- VMware Workstation 虚拟机报错:Exception 0xc000001d has occurred.Failed to enumerate host parallel ports
- 红旗Linux6.0中忘记了root密码
- Android中为图标加上数字--用于未读短信数提醒,待更新应用数提醒等
- 一个很小的洗牌算法
- Android控件开发之Menu
- 更改shell的方法
- 现代数据库管理学习笔记五 逻辑数据库设计和关系模型
- 聊聊程序员最头痛的问题:如何写一篇好看又易读的文章
- Android 体系结构介绍(转)
- similarity join(record linkage, merge/purge, deduplicate)总结
- 让IE6支持PNG的各种方法
- 指针