到網上搜了下acm題目產生方法,卻沒有搜尋到有用的資料,那只能自己鑽研一下了,下面把鑽研出的結果給大家分享一下。
我們知道,acm的題目對演算法要求很高,oj上而如何評判乙個演算法的複雜度靠的是測試資料。一般地,題目需要資料量比較大,不可能人工地去產生,只能借助計算機產生測試資料,而為了避免資料出現規律性,那應該盡量讓資料隨機。接下來,我們就研究最一般的問題,如何產生int,long long ,大整數,以及字串?
我們知道,c語言提供了我們乙個隨機函式rand(),可惜的是它只能產生(1~2^15-1)以內的資料。遠遠滿足不了我們對int 型資料的需求(-2^31,2^31-1),更不用說long long 型和大整數了。
那麼一種辦法是利用 x=rand()/(2^15-1)*(2^31-1),這樣做的結果範圍是變大了,但是導致有些數根本不會出現,例如rand()等於0的時候,x=0,當rand()等於1的時候,x=(2^31-1)/(2^15-1)所以會導致(0,(2^31-1)/(2^15-1))之間的數根本不會出現。
下面利用了一種簡單的演算法產生隨機數
由於最後產生的資料都要存入文字文件,所以以字串表示的整數和以int型表示存進去沒有差別,這裡統一以字串形式存入文字文件。
1.先隨機產生乙個數字n,代表即將產生乙個n位數
2.對於這個n位數,每位上的數字都隨機產生
這樣就可以實現構造乙個int型數了。
下面是隨機產生int型資料的**
#include#include#include#include#include#define digit 10
using namespace std;
string llmax="9223372036854775807";
string intmax="2147483647";
string randomint()
return s;
}if(n==1) s+=rand()%10+'0';//
else s+=rand()%9+1+'0';//第一位為1-9之間的數
for(int i=2;i<=n;i++) s+=rand()%10+'0';//隨機產生第2-n位上的數字
if(rand()%2==1) s='-'+s;//產生負數
return s;
}int main()
return s;
}if(n==1) s+=rand()%10+'0';//
else s+=rand()%9+1+'0';//第一位為1-9之間的數
for(int i=2;i<=n;i++) s+=rand()%10+'0';//隨機產生第2-n位上的數字
if(rand()%2==1) s='-'+s;//產生負數
return s;
}int main()
int main()
{ int m=0;
ofstream in("in.txt");
srand((unsigned)time(null));
for(int i=0;i<100;i++)
in<
#include#include#include#include#define digit 30
using namespace std;
string llmax="9223372036854775807";
string intmax="2147483647";
string smellalphabet="abcdefghijklmnopqrstuvwxyz";
string upperalphabet="abcdefghijklmnopqrstuvwxyz";
string randomstring()
{ int n=rand()%digit+1;//接下來生成n位字串
string s;
for(int i=0;i
構造大量測試資料的方法(MySql)
建立測試表 create table sys user id char 32 not null default comment 主鍵 username varchar 100 not null default comment 使用者名稱 password char 32 not null defau...
在Keras中匯入測試資料的方法
keras裡面有很多經典的資料集。當我們研究自己的模型的時候,只需要拿出其中與我們要研究的問題類似的資料集進行試驗就行了。比如之前提到的手寫數字識別的經典資料集mnist。就只需要一行 x train,y train x test,y test mnist.load data 創造資料集是一件比較難...
Oracle生成一百萬測試資料的方法
oracle生成一百萬測試資料的方法如下 方法一 建立乙個表,並同時新增1000000條資料,create table testtable as select rownum as id,to char sysdate rownum 24 3600,yyyy mm dd hh24 mi ss as i...