1. 程式人生 > >測試C++程式執行的時間

測試C++程式執行的時間

參加一個公司的筆試,給了兩個題目,時間要求是越快越好,這時候就要求我們在編寫程式之後測試程式所需的時間,儘量做到最小。

在C++中計算執行的時間是呼叫clock函式,使用clock函式獲得程式開始和結束所需的時間,相減就得到程式所花的時間。

clock()是C/C++中的計時函式,而與其相關的資料型別是clock_t。在MSDN中,查得對clock函式定義如下:

clock_t clock(void) ;

簡單而言,就是該程式從啟動到函式呼叫佔用CPU的時間。這個函式返回從“開啟這個程式程序”到“程式中呼叫clock()函式”時之間的CPU時鐘計時單元(clock tick)數,在MSDN中

稱之為掛鐘時間(wal-clock);若掛鐘時間不可取,則返回-1。其中clock_t是用來儲存時間的資料型別。

#include<iostream>
#include<ctime>
using namespace std;

int main()
{
    clock_t start,finish;
    start=clock();
    
    cout << "HW .... " << endl;
    
    finish=clock();
    
    cout << finish-start   << "/" << CLOCKS_PER_SEC  << " (s) "<< endl;
    
    return 0;
}


再測試一個複雜一點的程式

#include<iostream>
#include<ctime>
using namespace std;

int main()
{
    clock_t start,finish;
    start=clock();
    
    cout << "HW .... " << endl;
    
    int k;
    int Joseph[14];    //記錄表,將下標為k對應的m的值記錄下來,避免重複計算
    memset(Joseph,0,sizeof(Joseph));
    while(cin>>k&&k){
        int n = 2*k;
        if(Joseph[k]){
            cout<<Joseph[k]<<endl;
        }
        else{
            for(int m=1;;m++){
                int result = 0;
                for(int i=1;i<=k;i++){   //用i表示第幾輪
                    result = (result+m-1)%(n-i+1);
                    if(result<k)
                        break;
                }
                if(result>=k){
                    Joseph[k] = m;  //找到符合條件的值,就更新記錄表
                    cout<<m<<endl;
                    break;
                }
            }
        }
    }
    
    finish=clock();
    
    cout << finish-start   << "/" << CLOCKS_PER_SEC  << " (s) "<< endl;
    
    return 0;
}