1049 數列的片段和 20 分

2021-10-07 06:00:57 字數 1297 閱讀 6649

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 個片段。

給定正整數數列,求出全部片段包含的所有的數之和。如本例中 10 個片段總和是 0.1 + 0.3 + 0.6 + 1.0 + 0.2 + 0.5 + 0.9 + 0.3 + 0.7 + 0.4 = 5.0。

輸入第一行給出乙個不超過 105 的正整數 n,表示數列中數的個數,第二行給出 n 個不超過 1.0 的正數,是數列中的數,其間以空格分隔。

在一行中輸出該序列所有片段包含的數之和,精確到小數點後 2 位。

4

0.1 0.2 0.3 0.4

5.00
【我的**】

1// 1049 數列的片段和 (20 分).cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。

2//3 4#include 5#include 6using namespace std;

7int main()

819    printf("%.2f", sum);

20}

【思路】

這個題目很有意思,其實是乙個找規律的題目,看上去很複雜,實際上如果動手寫一寫就可以展開發現規律。

就拿案例來舉例子:

對0.1來說,0.1需要加的次數如下:

0.1,(0.1,0.2),(0.1,0.2,0.3),(0.1,0.2,0.3,0.4),一共4次。

對於0.2來說,0.2需要相加的次數如下:

0.2,(0.1,0.2),(0.2,0.3),(0.1,0.2,0.3),(0.2,0.3,0.4),(0.1,0.2,0.3,0.4),一共6次。

發現了沒有什麼規律?

每個數出現的次數與它所在的位置是相關的!因為0.1左邊沒有數字,所以0.1只能放在開頭,因此只有4種組合,同理,0.4右邊沒有數字,所以只能放在結尾,也是4種組合。

因此我們可以根據數字所在的位置列出通式:

出現次數 =  (右邊數字的個數) * (左邊數字的個數)

因此求和直接用一條語句即可:

1sum += (i + 1) * a[i] * (num - i);

1049 數列的片段和 (20 分)

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 個片段。...

1049 數列的片段和 (20 分)

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 個片段。...

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 個片段。給定正整數數列,求出全部片段包含的...