#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
clock_t start_clock,end_clock;
int i;
double sum=0.0;
float spend;
start_clock=clock();
//取得程式從開始執行到此函數
//所經過的滴答數(ticks)
for (i=1;i<=100000000;i++)
sum+=i;
end_clock=clock();
//取得程式從開始執行到此函數
//所經過的滴答數(ticks)
spend =(double) (end_clock-start_clock)/CLK_TCK;
//計算1+2+3+....+100000000所花的時間
//CLK_TCK是定義在time.h內的常數名稱,
//其值等於1000(個滴答數/每秒)
//除以 CLK_TCK 常數,即可得到所花的秒數
printf("1+2+...+100000000=%.0lf\n",sum);
printf("計算1+2+3+....+100000000所花的時間:");
printf("%lf\n", spend);
system("pause");
return 0;
}
**以上是 計算1+2+3+....+100000000所花的時間,目前可以監控出每次執行迴圈所花的時間,那怎麼把每次迴圈執行的時間給固定呢?
target
end
- start
就繼續耗下去start = clock();
while((end - start) < target) {
end_clock = clock();
}
這是腦筋急轉彎的題目
難不倒我的
題目是「計算1到N的和」
原做法是用連加法,花費時間為「N-1
次的加法」,故時間不固定
正確解答是用梯形公式,花費時間為「1次加法+1次乘法+1次除法」,故時間可固定
選我正解
待會兒要吃韓式炸雞慶祝
我只想說。這是啥鬼??
埶行時間固定???
除非是筆誤。要不然我還真不知道該如何去回答這樣的問題。
這是辦不到的事。因為運行的時間,不是程式能夠掌控的。
難不成,你叫他執行1秒。它執行了5秒。那這就是程式BUG嘛??
您是說WINDOWS 嗎?
先使用程式 CALL 另一個(迴圈程式)
並找出"處理序識別碼"PID,並記錄PID 時間
當時間到了~ 就將KILL PID
或c:\>taskkill /IM ***.exe
這樣就會達到您要的執行的時間給固定。
Linux下要刪除某個程序通常會使用 ps 配合 kill 來刪除程序。
kill -9 [PID]
所以您也要知道PID
我想這是因為你對「演算法」的功能與目標認知有點誤會
上面有人有提供一些直接回答你答案的做法
其中有一個是:控制一個迴圈運行的時間,到了就強制結束
但這樣會讓回圈變得不可靠
(只可用於更新畫面之類本來就不講求絕對穩定可靠,只要相對可用即可的任務。)
其實控制運算時間的目的在於...
假設end_clock有兩個例子(從多種可能中取出兩個)
這兩個數值差異在100以上
但丟進回圈中取得答案,則取得答案所需的回圈執行次數差異就是100倍以上
如何將這個次數差異控制在「可接受」的範圍內才是「把每次迴圈執行的時間給固定」
所以用數學計算式去求答案
不管數值差異是多少(除非答案已經發生資料溢位)
所需要的次數應該都一樣(因為都是一次)
也就是說...
這題真正的答案是要你「別用回圈」做事情
這直覺上有點違反你學習程式過程中所建立的基礎認知
但程式本來就不是只有回圈
回圈讓程式的功能變得強大,但更基礎的東西(如何計算、如何邏輯判斷)讓程式變得神通廣大