⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2.cpp

📁 随机数算法
💻 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 + -