随机数小试

这是一个什么样的程序?

可以输出n个不同的有上限的数字

过程

由unsigned int seed =time (null); 可以得到一个随机数;再用一定的方法让其有上限;产生了随机数怎么保存呢?这是用到了数组,没产生一个需要的随机数就保存一个,若是不需要的(重复的),它就占了一个位置,要把这个位置还回去。

	for (int i = 0; i < geshu; i++){
		int t=shangxian-1; 
		int temp = rand() %shangxian ;
		
		if (i == 0){//第一个 直接保存 
			array[i] = temp;
		}else{
			//判断前面是否已经存在了
			int j = 0;
			 
			for(; j <i; j++){
				//比较j对应的值和之前所有的temp是否相同 
				if(array[j] == temp){
					//重复了
					//printf("重复了:%d\n",temp); 
					break; 
				} 
			}
			//判断是怎么出来的
			if (j == i){
				//将i前面的比较一遍都没发现重复的
				//保存temp值
				array[i] = temp; 
			}else{
				//重复了
				//重新回到当前这一次 
				i--; 
			}
		} 
	}

有哪些重点?

  1. 数组,数组的定义、使用;
  2. for循环,for语句的使用,for循环与其他语句的嵌套;
  3. 随机数的使用,使用随机数时,seed相当于一个种子,srand函数根据这个种子seed,设置一个随机起点,而rand函数根据这个随机起点,返回一个随机数【seed ,RAND_MAX】,其中RAND_MAX是0x7ffff,但是是一个伪的随机数(多次编译产生的随机数是一样的,除非给一个变化的种子),种子在一定代码内可以设置相同,产生一样的随机数。
    详情
    清风lsq
unsigned int seed = time(NULL); //1000
  	//time(NULL)是系统时间,设置种子为系统时间,随着系统时间变化,种子也在变,
  	//以后产生的随机数也在变,由于这个随机数
  	//设置随机数的种子
  	srand(seed); 
  	for(int i = 0; i < count; i++){
  		//rand()根据前面的seed返回一个随机数
  		int temp2 = rand() % 9 + 1;

提示

for(; j <i; j++){
				//比较j对应的值和之前所有的temp是否相同 
				if(array[j] == temp){
					//重复了
					//printf("重复了:%d\n",temp); 
					break; 
				} 

这段代码不能直接就判断temp与之前的随机数没有重复,因为它退出来的时候有两种情况!
2.

else{
				//重复了
				//重新回到当前这一次 
				i--; 

temp与之前的数重复之后,下面的操作就是i++,但是这一轮中并没有在这个数组中存入一个数(会有,因为之气那没有初始化这个数组。。。记得变量要初始化),所以要让下一个符合的数存入这个位置,就需要把下一步i++给减下来,即i- -;

总结

做题先要理清思路,看需要哪些东西。慢慢来,good good study,day day up!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值