一個隨機數的類c++

。就叫你吧發表於2021-01-03

一個隨機數的類

這是一個生成隨機數的類。是在碼農有道c語言技術網c++中容器章節下的一道習題,這也是我第一次發表的文章,如有不當之處,敢情斧正。
下面展示程式碼。

#include <string>       // string需要的標頭檔案
#include <vector>       // vector需要的標頭檔案
#include <time.h>       
#include <stdlib.h>

using namespace std;
class CRand
{
 public:
  vector<int> m_val;    //用於存放隨機數的容器
  void Rand(const int minvalue,const int maxvalue,const int totalcount,const bool brep=true);//CRand類的方法:用於生成一個隨機數 
  

};

void CRand::Rand(const int minvalue,const int maxvalue,const int totalcount,const bool brep)//min隨機數的最小值; max隨機數的最大值 ;totalcount 隨機數的個數;brep 是否要重複的隨機數 
{
  srand(time(NULL));                     //撒下種子 
 
  for(int i=0;i<totalcount;)         //用於生成所需的totalcount 個數的隨機數 
  {
    int k;

    k=rand()%(maxvalue+1);          //生成小於maxvalue的隨機數 
   
     if(k>=minvalue)               //篩選大於minvalue的隨機數 
     {
      if(brep)                    //判斷是否可以重複 (感覺可以用switch) ; true可以重複;false不可以重複; 
        {
           m_val.push_back(k);    //可以重複將得到的隨機數放入容器 
           	 i++;
        }else
         {
		 int ii;
		 if(m_val.size()==0) m_val.push_back(k);     //開始容器裡沒有值,直接將k賦值給容器 
		  //printf("個數=%d\n",m_val.size());
          for( ii=0; ii<m_val.size();)               //判斷是否有重複 
           {
           	if(k==m_val[ii])                         
           	{  break;}
           	ii++;
		   } //printf("ii的值%d\n",ii);
			  if(ii==m_val.size()){             //當ii等於容器值的個數便可以判斷不是重複 
			   m_val.push_back(k);
			     i++;
			   }
		  } 
	
     }
  }

}

int main()
{
  CRand i;
 
  i.Rand(3,8,5,false);
  for(int ii=0;ii<5;ii++)
  { 
   printf("%d\n",i.m_val[ii]);
  }
  return 0;
} 

這是我第一次寫的程式碼,要求使隨機數的種子不能只用time(0)的秒,還可以利用微秒,同一秒內取到的隨機數將不同。我沒能寫出來,懇求各位大佬幫助。

相關文章