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