Re: [問題] 移動平均

看板C_and_CPP作者 (小龜)時間12年前 (2012/04/23 00:50), 編輯推噓3(303)
留言6則, 5人參與, 最新討論串2/3 (看更多)
※ 引述《et781120 (阿蘋)》之銘言: : 移動平均的意思是: : 例如有11筆資料,每三筆算一次的話: : 資料 0 1 2 3 4 5 6 7 8 9 10 : 平均 a b c d e f g h i : 則 a=(0+1+2)/3 : b=(1+2+3)/3 : c=(2+3+4)/3以此類推 : 我想問的是,我以下這樣算好像是錯的? : (假設輸入m筆資料,移動平均是n筆算一次,a[]是輸入的值,b[]是移動平均值) : sum=0; : for(i=0;i<(m-n);i++){ 如leiyan所提到的,sum=0必須要放在這裡才對 因為,是底下那個for迴圈在進行加總,所以放在這裡才能在每次加總前洗掉 : target=n+i-1; : for(j=i; j<=target;j++){ : sum=a[j]+sum; : } : ave=sum/n; 這個寫法會有一點問題,如果sum和n都是整數, 那麼相除時,小數部分會被丟掉 例如,8/3會是2,而非2.666... 當然,如果sum和n至少有一個是double型別的話,就沒有這個問題 : b[target-1]=ave; 這邊也怪怪的 假設現在取n=3,外層跑到i=0,則target是3+0-1=2, 你又寫到b[target-1]去,好像跟上面舉的例子不太像@@ 又,如果這個程式會連續跑很多次的話, b沒有每次全部洗掉也會有問題,因為會讓新的資料,誤用舊的資料進行判斷 : } : 謝謝!!! 作業due快到了,有問題歡迎來信詢問~~ 題目是我出的,哪裡會出問題大概都推演過了~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.88.70

04/23 01:22, , 1F
清大出的問題怎麼那麼簡單= ="
04/23 01:22, 1F

04/23 01:24, , 2F
抱歉我錯了,下次弄難一點@@
04/23 01:24, 2F

04/23 01:25, , 3F
不過平均這邊,只能算是初始化,後面還有一堆判斷
04/23 01:25, 3F

04/23 01:49, , 4F
這是文組的作業QQ
04/23 01:49, 4F

04/23 09:49, , 5F
XDDDD
04/23 09:49, 5F

04/24 13:45, , 6F
個人認為改一下會簡潔多,用b[i]移到內部for,外面再做平均。
04/24 13:45, 6F
文章代碼(AID): #1Fb3R1DQ (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 2 之 3 篇):
文章代碼(AID): #1Fb3R1DQ (C_and_CPP)