64,282
社区成员
发帖
与我相关
我的任务
分享
//随机产生N=640*480*30个取值范围为M=1~640*480*30*2的不重复的随机数
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <malloc.h>
#define N 640*480*30
#define M 640*480*30*2
int i,a,b;
unsigned long ul,t;
unsigned long *d;
unsigned long ulrand(void) {
return (
(((unsigned long)rand()<<24)&0xFF000000ul)
|(((unsigned long)rand()<<12)&0x00FFF000ul)
|(((unsigned long)rand() )&0x00000FFFul));
}
void main() {
d=(unsigned long *)malloc(M*sizeof(unsigned long));
if (NULL==d) {
printf("Can not malloc(%d)!\n",M*sizeof(unsigned long));
return;
}
for (i=0;i<M;i++) d[i]=(unsigned long)i+1;
srand(time(NULL));
for (i=M;i>0;i--) {/* 打乱d[0~M-1] */
a=i-1;b=ulrand()%i;
if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
}
for (i=0;i<N;i++) printf("%08lu\n",d[i]);
free(d);
}
[User:root Time:13:06:07 Path:/home/liangdong/c]$ ./output
211224302
48391966
1725535402
1446122221
2755167891
3295194106
3197570105
2983542393
615933470
1795109028
91720513
764037545
1583518780
3656489667
122144737
4130644217
2554011625
397826093
1025195296
567415520
3744238597
2057238149
3879090146
3917676704
677506327
2702769844
2963660401
493729977
1072139505
3004186491
1129189395
2133119042
671665964
3759724610
3963613494
277643425
2495263398
2245264738
1150582893
3945362546
234371862
339748457
175301269
3556113117
3339768640
3053510114
2764929346
135153055
479459479
3279498197
[User:root Time:13:06:08 Path:/home/liangdong/c]$ ./output
731919894
1147893534
1563917266
2445224879
2662737291
1894737694
3969870244
2688020049
3248632517
2896822153
2304617576
1805955706
1750586186
409043451
1835070164
1398019960
1583018616
4101595095
4132395958
3110547409
3321535743
1040527731
2312987348
1298861080
3600127718
1743446828
2500345809
1032981170
1990478561
1638341937
2253996195
4080424278
3106835316
3056152539
3325069072
2953884061
2707054833
2078151107
2873434137
1505192202
829304226
1415009444
3646716850
455697366
176479699
314121003
3516828737
3380813547
1967741333
1479422566
[User:root Time:13:06:08 Path:/home/liangdong/c]$ cat src/main.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, char* const argv[]) {
int fd = open("/dev/urandom", O_RDONLY);
if (fd == -1) {
return 1;
}
unsigned int n, i;
for (i = 0; i != 50; ++ i) {
int ret = read(fd, &n, sizeof(n));
if (ret != sizeof(n)) {
return 2;
}
printf("%u\n", n);
}
return 0;
}
#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");
}
}
}