問題 1168 簡單計算

2021-09-14 01:41:35 字數 2379 閱讀 3461

時間限制: 1sec 記憶體限制: 128mb 提交: 378 解決: 122

題目描述

有乙個n+2個元素a[0], a[1], ..., a[n+1] (n <= 3000, -1000 <= a[i] <=1000)構成的數列.

已知對i=1, 2, ..., n有a[i] = (a[i-1] + a[i+1])/2 - c[i].

給定a0, a[n+1], c[1], ... , c[n]. 寫乙個程式計算a[1].

輸入第一行是整數n. 接下來兩行是a[0]和a[n+1], 其小數點後有兩位數字. 其後的n行為c[i](同樣是兩位小數), 每行乙個數.

輸出輸出為a[1], 格式與a[0], a[n+1]相同.

樣例輸入

1

50.50

25.50

10.15

樣例輸出

27.85
解題思路:

1.列出基本遞推關係式子:

a[1] = (a[0] + a[2]) /2- c[1]

a[2] = (a[1] + a[3]) /2- c[2]

a[3] = (a[2] + a[4]) /2- c[3]

......................................

a[n] = (a[n-1] + a[n+1]) /2 -c[n]

2.要輸入資料有:n, a[0], a[n+1], 以及 c[1]~~c[n];

3.求a[1];

4.分析題目:

(1)n<=3000,說明不可以用遞迴,否則棧溢位;

(2)數列a中,輸入的是資料只是第乙個數a[0]和最後乙個數a[n+1],用上面基本遞推式子,發現中間有好多未知量,說明得根據遞推式子,求a[1],和a[0],a[n+1],c[i]間的關係;

5.求關係

遞推關係兩遍同時乘以2,把分母2消除以便推導即:

2*a[n] = a[n-1] + a[n+1] -2*c[n]

為了推導方便先假設n=5,則有一下式子

2*a[1]=a[0]+a[2]-2*c[1]

2*a[2]=a[1]+a[3]-2*c[2]

2*a[3]=a[2]+a[4]-2*c[3]

2*a[4]=a[3]+a[5]-2*c[4]

2*a[5]=a[4]+a[6]-2*c[5]

把以上式子加起來,可消元得到:

a[1]+a[5]=a[0]+a[6]-2*(sum(1~5))

這裡sum(1~5)=c[1]+c[2]+....+c[5]

走到上面發現式子裡面還有個未知量a[5],想辦法把a[5]也消去;

返回第2步,令n=4,把式子加起來,可消元得到:

a[1]+a[4]=a[0]+a[5]-2*(sum(1~4))

再令n=3,把式子加起來,可消元得到:

a[1]+a[3]=a[0]+a[4]-2*(sum(1~3))

直到n=1

a[1]+a[1]=a[0]+a[2]-2*(sum(1~1))

把以上得到的所有式子羅列出來:

a[1] + a[5] = a[0] + a[6]- 2*(sum(1~5))

a[1] + a[4] = a[0] + a[5]- 2*(sum(1~4))

a[1] + a[3] = a[0] + a[4]- 2*(sum(1~3))

a[1] + a[2]= a[0] + a[3]- 2*(sum(1~2))

a[1] + a[1] = a[0] + a[2]- 2*(sum(1~1))

再把這些式子加起來,消元得到:

6*a[1] =5*a[0] + a[6] - 2*(sumx(1~5))

這裡sumx(1~5)=sum(1~1)+sum(1~2)+sum(1~3)...+sum(1~5) 即:

sumx(1~5)=c[1]+(c[1]+c[2])+(c[1]+c[2]+c[3])+.....+(c[1]+c[2]+..+c[5])

11.最終:a[1] = ( 5*a[0] + a[6] - 2*(sumx(1~5)) )/6

12.據歸納法當n=n時;

a[1] = ( n*a[0] + a[n+1] - 2*( sumx(1~n) ) ) / (n+1)

#include#includeusing namespace std;

double c[3010];

int main()

a1 = (n * a0 + an1 - 2 * temp) / (n + 1);

printf("%.2lf\n",a1);

return 0;

}

問題1168 改寫整數

改寫整數 描述小紅又給小明出難題了,這次的問題是給小明一些非負整數,讓他按照一定的規則程式設計改寫這些整數,規則如下 如果某個正整數中有n個相同的數字x連續出現,那麼將它們改寫成 nx 的形式 對於單獨出現的數字x,將其改寫成 1x 的形式。例如,122344111應該改寫為1122132431。由...

問題 A 簡單計算器

讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。對每個測試用例輸出1行,即該表示式的值,精確到小數點後2位。30 90 26 9...

問題 A 簡單計算器

最近刷codeup時,逐步感到題目難度的提公升因此在後續階段,會逐步更新一些codeup中有一些難度的題目.思路 看到題目後,就首先想到了資料結構時,所學習到的中綴以及字尾表示式。實現思路如下 1 首先將中綴表示式轉換成字尾表示式,這裡我們需要借助佇列與棧。對中綴表示式進行處理,對於數字直接將其pu...