Pat乙级 1049 数列的片段和
生活随笔
收集整理的這篇文章主要介紹了
Pat乙级 1049 数列的片段和
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Pat乙級 1049 數列的片段和
- 思路
- 代碼
題目網址
https://pintia.cn/problem-sets/994805260223102976/problems/994805275792359424
思路
觀察給出的數據,得出規律,比如一共10個數,第二個數出現的次數為 2 * (10 - 2 + 1)次,得到公式 result = i * (n - i + 1)。因為double的精度誤差問題,用long long對數據進行縮放再存儲,最后再除。這里取1000參照了其他人的博客,跟測試數據是相關的,不是一個必然的解決方案。
累加的時候代碼中注釋掉的一行替換上來就過不了測試點2和測試點3,很奇怪,回頭還記得的話再看看。
代碼
#include<iostream> #include<iomanip>using namespace std;int main() {int n;long long sum = 0;double f;cin >> n;for (int i = 1; i <= n; i ++) {cin >> f;sum += (long long)(f * 1000) * i * (n - i + 1); // sum += i * (n - i + 1) * (long long)(f * 1000);}cout << setiosflags(ios::fixed) << setprecision(2) << sum /1000.0 << endl;return 0; }總結
以上是生活随笔為你收集整理的Pat乙级 1049 数列的片段和的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pat乙级 1045 快速排序
- 下一篇: C++ STL之vector常用方法