日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

PAT_B_1049_C++(20分)

發(fā)布時間:2023/12/15 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PAT_B_1049_C++(20分) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一看見有下面這個就不簡單

Java直接原地超時,上StreamTokenizer也不行,就不貼上來了,然后。。。
全網(wǎng)的題解沒有一個能AC的🤪🤪🤪
最后還是看了柳神的更新,找到了數(shù)據(jù)更新點(diǎn)

解題思路:



將數(shù)列中的每個數(shù)字讀取到temp中,假設(shè)我們選取的片段中包括temp,且這個片段的首尾指針分別為p和q,那么對于p,有i種選擇,即12…i,對于q,有n-i+1種選擇,即i, i+1, … n,所以p和q組合形成的首尾片段有 i * (n-i+1)種,因?yàn)槊總€里面都會出現(xiàn)temp,所以temp引起的總和為temp * i * (n – i + 1);遍歷完所有數(shù)字,將每個temp引起的總和都累加到sum中,最后輸出sum的值

數(shù)據(jù)更新

N比較大時,double類型的值多次累加導(dǎo)致的精度誤差,因?yàn)檩斎霝槭M(jìn)制小數(shù),存儲到double中時,計(jì)算機(jī)內(nèi)部使用二進(jìn)制表示,且計(jì)算機(jī)的字長有限,有的十進(jìn)制浮點(diǎn)數(shù)使用二進(jìn)制無法精確表示只能無限接近,在字長的限制下不可避免會產(chǎn)生舍入誤差,這些細(xì)微的誤差在N較大時多次累加會產(chǎn)生較大誤差,所以建議不要使用double類型進(jìn)行多次累加的精確計(jì)算,而是轉(zhuǎn)為能夠精確存儲的整型。嘗試把輸入的double類型的值擴(kuò)大1000倍后轉(zhuǎn)為long long整型累加,同時使用long long類型保存sum的值,輸出時除以1000.0轉(zhuǎn)為浮點(diǎn)型再輸出(相當(dāng)于把小數(shù)點(diǎn)向后移動3位后再計(jì)算,避免double類型的小數(shù)部分存儲不精確,多次累加后對結(jié)果產(chǎn)生影響)
但是也有問題,因?yàn)闇y試用例的不同小數(shù)點(diǎn)的位數(shù)不一樣,我在一天的兩個時段分別測試了5遍:中午第三個測試點(diǎn)依舊過不了,晚上六點(diǎn)半左右就一直都能過,所以代碼還有不成熟的地方,每次4個測試用例都需要知道是幾分位的小數(shù),所以這是個撞大運(yùn)的代碼,如果為了AC多提交幾次就夠了

//柳 #include <iostream> using namespace std; int main() {int n;cin >> n;long long sum = 0;double temp;for (int i = 1; i <= n; i++) {cin >> temp;sum += (long long)(temp * 1000) * (n - i) * (i + 1);}printf("%.2f", sum / 1000.0);return 0; }

總結(jié)

以上是生活随笔為你收集整理的PAT_B_1049_C++(20分)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。