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

📄 rand.cpp

📁 随机数算法
💻 CPP
字号:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <fcntl.h>
#include <conio.h>
#include <string.h>

int x;
int y;
int z;

struct BLTS_RAND_STRU{
	unsigned int rand_num; //!<产生随机数
	unsigned int rand_cnt; //!<产生随机数次数
};


void init()
{
	SYSTEMTIME systime;
	GetSystemTime(&systime);
	x = systime.wMilliseconds*systime.wSecond;
	//x = 1;
	y = x;
	z = x;
}

double rand_val(void)
{
	double r;
//	do{
		x = (171 * x) % 30269;
		y = (172 * y) % 30307;
		z = (170 * z) % 30323;
		r = x/30269.0 + y/30307.0 + z/30323.0 ;
		printf("r=%0.10f\n", r);
//	}while(r >= 1.0);
	return r;
}

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()*(max-min+1)))%(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 write_file(int min, int max, int num, BLTS_RAND_STRU *rand_stru, int time)
{
	FILE *fp;
	char filename[255];
	int i;

	sprintf(filename, "rand_%d_%d_%d.txt", min, max, num);

	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", time);
	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);
		}
	}

	fclose(fp);
}

void main()
{
	int min = 0, max = 0, i, num;
	BLTS_RAND_STRU *rand_stru;

	clock_t  start,  end; 

	min = 1;
	max = 10;
	num = 10;

	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();   
	
	init();
	
	for(i = 0; i < 1; i++)
	{
		blts_rand(min, max, num, rand_stru);
	}

	end = clock();
	
	write_file(min, max, num, rand_stru, end-start);
    
	free(rand_stru);


/*
	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);
	
/*	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);
	}
	*/
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -