給定乙個正數數列,我們可以從中擷取任意的連續的幾個數,稱為片段。例如,給定數列 ,我們有 (0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4) (0.4) 這 10 個片段。
給定正整數數列,求出全部片段包含的所有的數之和。如本例中 10 個片段總和是 0.1 + 0.3 + 0.6 + 1.0 + 0.2 + 0.5 + 0.9 + 0.3 + 0.7 + 0.4 = 5.0。
輸入第一行給出乙個不超過 105
10^5
105
的正整數 n
nn,表示數列中數的個數,第二行給出 n
nn 個不超過 1.0 的正數,是數列中的數,其間以空格分隔。
在一行中輸出該序列所有片段包含的數之和,精確到小數點後 2 位。
4
0.1 0.2 0.3 0.4
5.00
每個數字的連續片段可拆成左右兩個片段,而左右兩個片段都包含該數字本身,所以
每 個數
出現的次
數=(左
邊的數字
個數+1
)∗(右
邊的數字
個數+1
)。
每個數出現的次數 = (左邊的數字個數+1) * (右邊的數字個數+1)。
每個數出現的
次數=(
左邊的數
字個數+
1)∗(
右邊的數
字個數+
1)。其中,左邊的數字個數為 i
ii,右邊的數字個數為 n−i
+1
n-i+1
n−i+1。
n ot
enote
note
: 結果sum
使用 dou
bl
edouble
double
型別儲存時會產生精度問題。先將每項乘以1000並強制轉換為 lon
glong
long
l on
glong
long
, 保留每一項小數點後3位,從而保證結果精確到2位小數時可以正確地四捨五入。
#include
using
namespace std;
intmain()
printf
("%.2lf\n"
, sum /
1000.0);
return0;
}
PAT乙級 1049 數列的片段和
問題描述 給定乙個正數數列,我們可以從中擷取任意的連續的幾個數,稱為片段。例如,給定數列 我們有 0.1 0.1,0.2 0.1,0.2,0.3 0.1,0.2,0.3,0.4 0.2 0.2,0.3 0.2,0.3,0.4 0.3 0.3,0.4 0.4 這 10 個片段。給定正整數數列,求出全部...
PAT 乙級 1049 數列的片段和
給定乙個正數數列,我們可以從中擷取任意的連續的幾個數,稱為片段。例如,給定數列 我們有 0.1 0.1,0.2 0.1,0.2,0.3 0.1,0.2,0.3,0.4 0.2 0.2,0.3 0.2,0.3,0.4 0.3 0.3,0.4 0.4 這 10 個片段。給定正整數數列,求出全部片段包含的...
PAT乙級 1049 數列的片段和 20
題目 給定乙個正數數列,我們可以從中擷取任意的連續的幾個數,稱為片段。例如,給定數列,我們有 0.1 0.1,0.2 0.1,0.2,0.3 0.1,0.2,0.3,0.4 0.2 0.2,0.3 0.2,0.3,0.4 0.3 0.3,0.4 0.4 這10個片段。給定正整數數列,求出全部片段包含...