PAT乙級1049 數列的片段和 找規律

2021-10-04 09:39:49 字數 2403 閱讀 3509

給定乙個正數數列,我們可以從中擷取任意的連續的幾個數,稱為片段。例如,給定數列 ,我們有 (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 位。

輸入樣例:

40.1 0.2 0.3 0.4

輸出樣例:

5.00

思路:找規律

0.1

0.10.2

0.10.2

0.30.1

0.20.3

0.40.2

0.20.3

0.20.3

0.40.3

0.30.4

0.4

可以發現,0.1只出現在0.1打頭的時候且出現了4次

0.2出現在0.1和0.2打頭的時候且各出現3次

0.3出現在0.1,0.2和0.3打頭的時候且各出現2次

0.4出現在0.1,0.2,0.3和0.4打頭的時候且各出現1次

#include

#include

#include

using

namespace std;

intmain()

rec = vec.

size()

;for

(int i =

0; i < vec.

size()

; i++

) cout << fixed <<

setprecision(2

)<< sum;

return0;

}

再貼上柳神簡介精煉的做法:

思路是設這個片段的首尾指標p和q。對於p,即1~i共有i種選擇,即1,2…,i;對於q,有n-i+1種選擇,即i,i+1…,n,所以p和q組合成形成首尾片段共i * (n - i + 1)個種,因為每個裡面都有temp,所以總和為temp * i * (n - i + 1)

0.1的情況

0.1前只有[

]一種情況,所以i是1;後面有[

]、[0.2

]、[0.2,0.3

]、[0.2,0.3

,0.4

]四種情況,n-i+1=

4所以0.1*1

*4是所有包含0.1情況的0.1的和

0.10.1

0.20.1

0.20.3

0.10.2

0.30.4

0.2的情況

0.2前有[

]、[0.1

],所以i是2;後面有[

]、[0.3

]、[0.3,0.4

]三種情況

所以0.2*2

*3就是所有包含0.2情況的0.2的和。後面以此類推

0.10.2

0.10.2

0.30.1

0.20.3

0.40.2

0.20.3

0.20.3

0.40.3的情況

0.10.2

0.30.1

0.20.3

0.40.2

0.30.2

0.30.4

0.30.3

0.40.4的情況

0.10.2

0.30.4

0.20.3

0.40.3

0.40.4

#include

using

namespace std;

intmain()

printf

("%.2f"

, sum)

;return0;

}

#include

#include

using

namespace std;

intmain()

printf

("%.2llf"

, sum)

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