📄 2.cpp
字号:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <fcntl.h>
#include <conio.h>
#include <string.h>
struct BLTS_RAND_STRU{
unsigned int rand_num; //!<产生随机数
unsigned int rand_cnt; //!<产生随机数次数
};
/*!
Return a random value between 0.0 and 1.0
*/
double rand_val(void)
{
const long a = 16807; //!< Multiplier
const long m = 2147483647; //!< Modulus
const long q = 127773; //!< m div a
const long r = 2836; //!< m mod a
static long x = 0; //!< Random int value (seed is set to 1)
long x_div_q; //!< x divided by q
long x_mod_q; //!< x modulo q
long x_new; //!< New x value
x = rand(); //!< RNG using integer arithmetic
x_div_q = x / q;
x_mod_q = x % q;
x_new = (a * x_mod_q) - (r * x_div_q);
if (x_new > 0)
{
x = x_new;
}
else
{
x = x_new + m;
}
return((double) x / m);
}
void blts_rand(int min, int max, int num, BLTS_RAND_STRU *rand_stru)
{
int i;
unsigned int rand_num;
for(i = 0; i < num; i++)
{
rand_num = min + ((int)(rand_val()*100000))%(max-min+1);
if(rand_stru[rand_num - min].rand_cnt == 0)
{
rand_stru[rand_num - min].rand_num = rand_num;
rand_stru[rand_num - min].rand_cnt ++;
}
else
{
if(rand_stru[rand_num - min].rand_num != rand_num)
{
printf("num err\n");
return;
}
else
{
rand_stru[rand_num - min].rand_cnt ++;
}
}
}
return;
}
void main()
{
int min = 0, max = 0, fd, num, rc;
BLTS_RAND_STRU *rand_stru;
char filename[255];
FILE *fp;
int i;
clock_t start, end;
min = 1;
max = 100;
num = 100;
SYSTEMTIME systime;
GetSystemTime(&systime);
srand(systime.wMilliseconds*systime.wSecond);
// printf("input value:%d\n", max-min);
// scanf("%d %d %d", &min, &max, &num);
sprintf(filename, "rand_%d_%d_%d.txt", min, max, num);
rand_stru = (BLTS_RAND_STRU*)malloc((max-min+1)*sizeof(BLTS_RAND_STRU));
if(rand_stru == NULL)
{
printf("malloc err\n");
}
memset(rand_stru, 0, ((max-min+1)*sizeof(BLTS_RAND_STRU)));
start = clock();
for(i = 0; i < 1000000; i++)
{
blts_rand(min, max, num, rand_stru);
}
end = clock();
/*
for(i = 0; i < max-min+1; i++)
{
printf(" %d \t %d\n", rand_stru[i].rand_num, rand_stru[i].rand_cnt);
}
*/
// fd=open("file.txt",O_RDWR|O_CREAT);
fp=fopen(filename,"a");
if(fp <= 0)
{
printf("open file err\n");
}
fseek(fp, 0, SEEK_END);
fprintf(fp, "\n min:%d \t max:%d \t num:%d\n", min, max, num);
fprintf(fp, " time(ms):%d\n", end - start);
fprintf(fp, " num \t cnt\n");
for(i = 0; i < max-min+1; i++)
{
if(rand_stru[i].rand_cnt != 0)
{
fprintf(fp, " %d \t %d\n", rand_stru[i].rand_num, rand_stru[i].rand_cnt);
}
}
/* rc = fwrite(&rand_stru[0], 1, (max-min+1)*sizeof(BLTS_RAND_STRU), fp);
if(rc != ((max-min+1) * sizeof(BLTS_RAND_STRU)))
{
printf("write err\n");
free(rand_stru);
fclose(fp);
}
*/
free(rand_stru);
fclose(fp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -