我的ACM題目測試資料產生方法

2021-06-27 23:38:06 字數 1904 閱讀 6415

到網上搜了下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...