2018/4/22招行fintech線上筆試代碼題第二題

題目:
牛牛去一個村莊推銷青草,村莊的每家每戶的房屋首尾相連形成環。
由於廣告策略,賣給某個住戶,就不能賣給他的鄰居。
問最多能賣出多少捆青草。
n:住戶數
x[i]:第i戶能購買的青草數量
t:要問多少次這個問題
輸入:
t
(然後t輪問題的輸入與輸出)
n
x[1]……x[n]
輸出:
最大售出數量

#include<stdio.h>

#define MAX 1000//房子數量最大值
int question();

int main()
{
    int i;
    int t;//詢問數
    int s;//問題答案
    scanf("%d", &t);
    for(i = 0; i<t; i++)
    {
        s = question();
        printf("%d\n", s);
    }
    return 0;
}

int question()
{
    int i;
    int n;//房子的數量
    int x[MAX];//每棟房子住戶需要購買的青草分數
    int sTemp[5] = {0};//暫存各方案的青草分數
    int s = 0;//存放答案

    scanf("%d", &n);
    for(i=0; i<n; i++)
        scanf("%d", &x[i]);

    //當n爲偶數時,有兩種賣出方案
    if(n%2 == 0)
    {
        for(i=0; i<n-1; i=i+2)
            sTemp[0] = sTemp[0] + x[i];
        for(i=1; i<n; i=i+2)
            sTemp[1] = sTemp[1] + x[i];
        if(sTemp[0] > sTemp[1])
            s = sTemp[0];
        else
            s = sTemp[1];
    }
    //當n爲奇數時,有五種賣出方案
    if(n%2 == 1)
    {
        if(n <= 5)
        {
            for(i=0; i<n-1; i=i+2)
                sTemp[0] = sTemp[0] + x[i];
            for(i=1; i<n; i=i+2)
                sTemp[1] = sTemp[1] + x[i];
            for(i=2; i<n; i=i+2)
                sTemp[2] = sTemp[2] + x[i];
            if(sTemp[0] > sTemp[1]) s = sTemp[0];
            else s = sTemp[1];
            if(s < sTemp[2]) s = sTemp[2]; 
        }
        else
        {
            for(i=0; i<n-1; i=i+2)
                sTemp[0] = sTemp[0] + x[i];
            sTemp[1] = sTemp[0] - x[i-2] + x[i-1];
            for(i=1; i<n; i=i+2)
                sTemp[2] = sTemp[2] + x[i];
            sTemp[3] = sTemp[2] - x[i-2] + x[i-1];
            for(i=2; i<n; i=i+2)
                sTemp[4] = sTemp[4] + x[i];
            for(i=0; i<5; i++)
            {
                if(sTemp[i] >s) 
                    s = sTemp[i];
            }
        }
    }

    return s;
}

/***********************************
Author: 張女名
Time: 2018/4/22 22:19
***********************************/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章