1. 程式人生 > 實用技巧 >函式遞迴呼叫(二分法),三元表示式,匿名函式,模組

函式遞迴呼叫(二分法),三元表示式,匿名函式,模組

前言

本文預設系統為Windows系列系統。

定義

當我們的程式過了樣例,是否意味著它一定能AC呢?顯然大多數情況下都是不行的。所以我們需要自己設計一些資料來測試我們的程式,但有的題目資料很大,我們肉眼無法看出程式計算的結果是否正確,手工計算又非常耗時,在緊張的比賽中,我們該怎麼應對呢?於是有了對拍。 對拍簡單的說就是當你寫完一個題目的程式以後,再寫一個暴力求解該題目的程式,然後自己生成一些測試資料,看同樣的資料,兩個程式輸出的結果是否相同,不同意味著被對拍的程式有問題。以此來幫助你修改程式,提高通過率的方法,我們稱為對拍。

過程

  1. 準備好正解程式、暴力程式。

  2. 寫生成隨機資料的程式。這裡提供模板:

    #include<bits/stdc++.h>
    using namespace std;
    int main() {
        srand(clock());
        //...
    }
    
  3. 寫windows對拍檔案。這裡提供模板:

    #include<bits/stdc++.h>
    #include<windows.h>
    using namespace std;
    int main() {
        while(1) {
            system("make.exe > date.txt");//make.exe為資料生成器,date.txt為生成資料
            system("1.exe < data.txt > 1.txt");//1.exe為暴力程式,1.txt為對應輸出檔案
            system("2.exe < date.txt > 2.txt");//2.exe為自己的程式,2.txt類似於上
            if(system("fc a.txt b.txt")) {//對比,true為有差異
                printf("Error!");
                break;
            }
        }
        system("pause");
        return 0;
    }
    

注意事項

  1. 注意輸出格式。
  2. 當對拍檔案停下時,data.txt即為發生錯誤的樣例。
  3. 編資料時最好不要用原題資料,暴力會卡死。畢竟只是保證正確性,資料小一點就好。