PTA 1049 數列的片段和 c語言 分析

2021-09-26 03:07:44 字數 1011 閱讀 4306

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

輸入第一行給出乙個不超過 10

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

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

40.1 0.2 0.3 0.4

5.00

分析:這道題其實如果只是做出來的話可以直接暴力求解,不過這樣的話提交顯示超時,那麼看來就是有規律可循。

重點來了。。。。。

0.1開始的帶有0.1的有4次。也就是14;

0.1開始帶有0.2的有3次,而0.2開始的帶有0.2的也有三次。也就是23;

0.1開始帶有0.3的有2次,0.2開始的帶有0.3的有2次,0.3開始的帶有0.3有2次。也就是32;

有沒有發現什麼規律?

0.1是第乙個數,從他開始到末尾有四個長度,所以個數為14

0.2是第二個數,從他開始到末尾有三個長度,所以個數為23

0.3是第三個數,從他開始到末尾有兩個長度,所以個數為32

所以:個數==(下標數+1)*(它到末尾的長度)

**如下:

int main()

{ int n;

double t,s=0;

scanf("%d", &n);

for(int i=0;i然後**裡有個東西需要注意,再乘的時候注意不要讓(n-1)*(i+1)放在前面,因為這樣int乘int可能會導致資料溢位

PTA 乙級 1049 數列的片段和 C 實現

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

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

給定乙個正數數列,我們可以從中擷取任意的連續的幾個數,稱為片段。例如,給定數列 我們有 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 個片段。給定正整數數列,求出全部片段包含的...