洗牌算法
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int
d[6];
int
i,n,a,b,t;
int
c,j;
void
main() {
srand
(
time
(NULL));
printf
(
"shuffle 0..n-1 demo\n"
);
for
(n=1;n<=5;n++) {
/* 测试1~5个元素 */
printf
(
"_____n=%d_____\n"
,n);
j=1;
for
(c=1;c<=n;c++) j=j*c;
/* j为n! */
j*=n*2;
for
(c=1;c<=j;c++) {
/* 测试n*2*n!次 */
for
(i=0;i<n;i++) d[i]=i;
/* 填写0~n-1 */
for
(i=n;i>0;i--) {
/* 打乱0~n-1 */
a=i-1;b=
rand
()%i;
if
(a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
}
printf
(
"%04d:"
,c);
for
(i=0;i<n;i++)
printf
(
"%d"
,d[i]);
printf
(
"\n"
);
}
}
printf
(
"shuffle 1..n demo\n"
);
for
(n=1;n<=5;n++) {
/* 测试1~5个元素 */
printf
(
"_____n=%d_____\n"
,n);
j=1;
for
(c=1;c<=n;c++) j=j*c;
/* j为n! */
j*=n*2;
for
(c=1;c<=j;c++) {
/* 测试n*2*n!次 */
for
(i=1;i<=n;i++) d[i]=i;
/* 填写1~n */
for
(i=n;i>1;i--) {
/* 打乱1~n */
a=i;b=
rand
()%i+1;
if
(a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
}
printf
(
"%04d:"
,c);
for
(i=1;i<=n;i++)
printf
(
"%d"
,d[i]);
printf
(
"\n"
);
}
}
}
相关阅读
C++雾中风景12:聊聊C++中的Mutex,以及拯救生产力的Boos
笔者近期在工作之中编程实现一个Cache结构的封装,需要使用到C++之中的互斥量Mutex,于是花了一些时间进行了调研。(结果对C++标准库很
出处:http://www.cppblog.com/mymsdn/archive/2009/02/19/handle-in-windows.html从广义上,能够从一个数值拎起一大堆数据的东西都
有一段时间没有写博客,最近一段时间一直在补自己的C++知识,尤其是面向对象的部分。昨晚在看CPP的时候发现了一个有趣的关键字:explic
指向引用的指针 使用指针的一个简单例子就是:int v = 1; int *p = &v; 需要预先强调的是没有指向引用的指针!因为引用不是对象,没
strncpy函数介绍 1:strncpy是 C语言的库函数之一,来自 C语言标准库,定义于 string.h,char *strncpy(char *dest, const char *src, i