2011-10-02 09:14:24Morris

a251. 假費波那契數

a251. 假費波那契數

內容 :

        Mr. X 發明了一種新的方法來製造數列,他把它叫做"假費波那契數",因為他製造數列的方法和費波那契數非常相似。Mr. X 的數列由4個初始數字開始( S1, S2, S3, S4 <=5),對於數字Si ( i > 4) 定義為:Si = Si-4 + Si-1 :

 

        對於一個奇數NMr. X 希望產生N個假費波那契數,而Mr. X總是想知道這N個數的中位數是多少。舉例來說 S1 = 3, S2 = 2, S3 = 4, S4 = 1, N = 7,則數列為:

3, 2, 4, 1, 4, 6, 10

排序後為:

1, 2, 3, 4, 4, 6, 10

所以中位數字是4.

對於給定的初始數字及N,請輸出Mr. X想要知道的數

輸入說明 :

        每個測資檔包含多組測資。每個測資檔第一個數字T代表接下來有幾組測資。每筆測資有五個數字N, S1, S2, S3, S4,測資保證N(5<=N<20)為奇數且0<= S1, S2, S3, S4<=5,所有數字皆為整數。

輸出說明 :

對每筆測資輸出一行,代表Mr. X想要知道的數字。

範例輸入 :

2
5 3 2 4 1
7 3 2 4 1

範例輸出 :

3
4

提示 :

出處 :

成功高中校內賽初賽 第一題 (管理:david942j)

/**********************************************************************************/
/*  Problem: a251 "假費波那契數" from 成功高中校內賽初賽 第一題 */
/*  Language: C (394 Bytes)                                                       */
/*  Result: AC(2ms, 246KB) judge by this@ZeroJudge                                */
/*  Author: morris1028 at 2011-10-02 07:07:09                                     */
/**********************************************************************************/


#include<stdio.h>
#include<stdlib.h>
int cmp(const void *i, const void *j) {
    return *(int *)i - *(int *)j;
}
int main() {
    int T, S[21], i, n;
    scanf("%d", &T);
    while(T--) {
        scanf("%d", &n);
        for(i = 1; i <= 4; i++)
            scanf("%d", &S[i]);
        for(i = 5; i <= n; i++)
            S[i] = S[i-4] + S[i-1];
        qsort(S+1, n, sizeof(int), cmp);
        printf("%d\n", S[n/2+1]);
    }
    return 0;
}