参加一个公司的笔试,给了两个题目,时间要求是越快越好,这时候就要求我们在编写程序之后测试程序所需的时间,尽量做到最小。
在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;
}