2011-06-01 22:11:15Morris

d881. 作業苦多

http://zerojudge.tw/ShowProblem?problemid=d881

內容 :

學校作業何其多~~老二為此苦惱了許久,現在又有一份數學作業,他想節省時間,所以想找一個程式來解決此問題,你能幫嗎?詳細題目如下:
計算一級數
每項的差形成一個等差數列
每一題給定一等差數列的公差
此等數列有50項,第一項為1
輸出此數列和(1+到50項)
例如輸入為1(此為各項差形成的等差級數的公差) 
答案要輸出1+2+4+7+11+......(到50項) 
若輸入為2
答案要輸出1+2+5+10+17+26+37...... (到五十項)

輸入說明 :

每次輸入一個測資d,代表公差(d<=100)

輸出說明 :

輸出級數和(1+到50項)

範例輸入 :

1

範例輸出 :

20875

提示 :

出處 :

CSDC (管理:leepupu)

作法 : 數字很小,懶得導公式,直接硬爆

/**********************************************************************************/
/*  Problem: d881 "作業苦多" from CSDC                                        */
/*  Language: C                                                                   */
/*  Result: AC (2ms, 256KB) on ZeroJudge                                          */
/*  Author: morris1028 at 2011-06-01 20:12:36                                     */
/**********************************************************************************/


#include<stdio.h>
main() {
    int d;
    while(scanf("%d", &d) == 1) {
        int sum = 0, a, t = 1;
        for(a = 0; a < 50; a++)
            sum += t, t = 1+(2+a*d)*(a+1)/2;
        printf("%d\n", sum);
    }
    return 0;
}

上一篇:d827. 買鉛筆

下一篇:d984. 棄保效應

迷惑者 2011-11-17 21:54:20

t = 1+(2+a*d)*(a+1)/2;
這句可以解釋一下嗎?
不太懂......

版主回應
若輸入為2
答案要輸出1+2+5+10+17+26+37...... (到五十項)
第n項 = 1+(1+(1+d)+(1+2d) ... 1+(n-1)d)
= 1+ (2*1+ (n-1)d)*(n)/2;
2011-11-18 06:10:34