対数器/対拍器C++版

30795 ワード

環境設定
1、コンピュータでマスターパスディレクトリを作成するデフォルトはD:/dsq/可変変数mpat 2、マスターパスの下でsampleフォルダA.cppとB.cppファイルAとBの名前可変変数anとbn 3、ビートする必要があるプログラムコードをA.cppとB.cpp 4に書き込み、対数器コードsample関数内でサンプルフォーマットを設定する
コンパイルモードを使用するには、環境変数にg++を追加する必要があります.devディレクトリの下MinGW 32binのg++を使用します.使用しない場合は、cmptを0に設定し、プログラムのコンパイル後を手動で配置します.exeファイルからメインパスへの非コンパイルモードコードは使用できません#ifdef LOCAL windows設定環境変数DevC++5.4.0ダウンロードアドレス
使用方法
sample関数でランダムに生成されたサンプルd_を構成するrand、f_rand関数はlr範囲に基づいて整数と浮動小数点数c_をランダムに生成するrand入力char*ランダム生成文字sample関数を書いた後、対数器プログラムを実行してメインパス/sampleパスの下で生成されたサンプルとABプログラムの戻り結果を表示しますプログラムは、一致しない戻り結果とサンプルのみを保持します(完全に一致する必要があります.プログラム実行後に表示される2つの列の左側の数値は、生成されたサンプル番号を示し、右側はテスト済みで一致しない個数を示します.
生成サンプル1の最初の行の整数n(1<=n<=100)次の行のn個の浮動小数点数(1.0<=v<=10.0)
void sample(stringstream &sout)
{
	int n = d_rand(1, 100);
	sout << n << endl;
	for (int i = 1; i <= n; i++)
		sout << f_rand(1, 10) << " ";
	sout << endl;
}

サンプル2を生成する最初の行の整数n次のn行の各行のxyは2次元座標保証座標が重複していないことを示す
void sample(stringstream &sout)
{
	map<int, map<int, int>> g; //             
	int n = d_rand(1, 100);
	sout << n << endl;
	for (int i = 1; i <= n; i++)
	{
		int x = d_rand(1, 100), y = d_rand(1, 100);
		while (g[x][y]) //        
			x = d_rand(1, 100), y = d_rand(1, 100);
		g[x][y] = 1;
		sout << x << " " << y << endl;
	}
}

生成サンプル3の1行目の整数nの次のn行がn*nの行列を表す.空き地#を壁にする
void sample(stringstream &sout) //    
{
	int n = d_rand(1, 10);
	sout << n << endl;
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)
			sout << c_rand("....#"); //.    4/5
		sout << endl;
	}
}

たいすうきコード
//             sample/         
#include 
using namespace std;

string mpat("D:/dsq/");		//         '/'!!!! linuxpwd      
string an("A"), bn("B");	//    
int brek = 5;				//       -1   
int cmpt = 1;				//    

void exec(const string &cmd, string &res)
{
	char buf[1024];
	FILE *fp = _popen(cmd.c_str(), "r"); //linux   popen
	while (fgets(buf, 1024, fp))
		res.append(buf);
	_pclose(fp); //linux   pclose
}
void wrfile(const string &path, stringstream &ss)
{
	string str;
	FILE *fp = fopen(path.c_str(), "wb");
	while (getline(ss, str))
		fprintf(fp, "%s\r
"
, str.c_str()); fclose(fp); } long long d_rand(long long l, long long r) { int k = rand() % 4; long long t = rand(); for (int i = 0; i < k; i++) t = t << 16 | rand(); return l + t % (r - l + 1); } double f_rand(double l, double r) { double t = rand() / 32767.0; return l + t * (r - l); } char c_rand(const string &ch) { return ch[rand() % ch.size()]; } void sample(stringstream &sout) // { } int main() { srand(time(NULL)); rand(); if (cmpt) // { system(("g++ " + mpat + an + ".cpp -o " + mpat + an + ".exe -std=c++11").c_str()); //C++11 system(("g++ " + mpat + bn + ".cpp -o " + mpat + bn + ".exe -std=c++11").c_str()); } string num, aout, bout, spat = mpat + "sample/"; // stringstream ss; int cnt = 0, wa = 0; for (int i = 1; i <= brek; i++) { ss.clear(), ss << i, ss >> num; remove((spat + num + "samp.txt").c_str()); remove((spat + num + "ans" + an + ".txt").c_str()); remove((spat + num + "ans" + bn + ".txt").c_str()); } while (wa < brek && cnt < 1e3) // { ss.str(""), ss.clear(), ss << wa + 1, ss >> num; aout.clear(), bout.clear(), ss.clear(); sample(ss); wrfile(spat + num + "samp.txt", ss); cout << ++cnt; exec(mpat + an + ".exe < " + spat + num + "samp.txt", aout); exec(mpat + bn + ".exe < " + spat + num + "samp.txt", bout); if (aout != bout) { ss.clear(), ss.str(aout); wrfile(spat + num + "ans" + an + ".txt", ss); ss.clear(), ss.str(bout); wrfile(spat + num + "ans" + bn + ".txt", ss); ++wa; } cout << "\t" << wa << endl; } return 0; } /*------------------------------------------All rights reserved----------------------------------------- Author: CaprYang Version: 3.1 All materials not authorized may not be redirected or for other usages. ------------------------------------------------------------------------------------------------------*/