1. 程式人生 > >全國計算機綠色大賽(第二階段)

全國計算機綠色大賽(第二階段)

  • 挑戰任務

    綠盟和各大名企合作,舉辦程式設計能力大賽,需要選拔一支參賽隊伍。隊伍成員全部來自“綠盟杯”中表現優秀的同學,每個同學都根據在比賽中的表現被賦予了一個能力值。現在被召集的N個同學已經集結完畢,他們按照編號依次站成了一排。

    你需要編寫一個程式,從這N個同學中選出S個同學,要求選出的同學的能力值的乘積最大,且要求被選出的相鄰兩個同學的編號的差不超過D

    程式設計要求

    補全右側程式碼區中的getBestTeams(int n,int a[],int kk, int d)函式,實現找出能力值乘積最大而且滿足編號要求的同學。將最終結果作為返回值返回,函式引數說明如下:

    int n

    召集到的同學的人數int a[] 各個同學的能力值(依次對應不同編號的同學,陣列的index就是學生的編號)int kk 需要選出的同學的人數int d 相鄰同學的編號的差的最大值

    測試說明

    樣例1: 輸入:3 , [7,4,7] , 2 , 50

    輸出:49

int getBestTeams(int n,int kk, int d){
    long long f[55][15][2];
    long long ans=0;
    for(int i=1;i<=n;i++)
    {
        f[i][1][0]=f[i][1][1]=a[i];
        for(int j=2;j<=kk;++j)
        {
            for(int k=i-1;k>=max(i-d,1);--k)//新增一個新變數記錄i可取值
            {
                f[i][j][0]=max(f[i][j][0],max(f[k][j-1][0],f[k][j-1][1]));
                f[i][j][1]=max(f[i][j][1],max(f[k][j-1][0]*a[i],f[k][j-1][1]*a[i]));
            }
        }
        ans=max(ans,max(f[i][kk][0],f[i][kk][1]));
    }
    return ans;
}
  • 挑戰任務

    “綠盟杯”比賽過後,賽事承辦方的各位工作人員們就開始分頭統計各個參賽隊伍和同學的成績了。賽事規模很大,有10000個隊伍參加。經過工作人員認真負責的統計,本來已經統計好了這一萬個隊伍的分數和排名,並按照排名從高到低依次進行了編號(從110000)但是由於一個非常偶然的因素,導致其中三個編號的資料丟失,而且剩餘編號的順序也全被打亂了。

    你需要編寫一個程式,根據還保留的統計資料,來判斷哪些編號的資料丟失了,並將這些編號按照從小到大的順序重新拼接為一個新數字,然後計算這個新數字除以11的餘數。如丟失了編號為41、17、25的資料,則最後你需要返回的結果是172541除以11的餘數。

    程式設計要求

    補全右側程式碼區中的getLostScores(int num[])函式,找出丟失的三個編號並按指定格式返回一個新數字除以11的餘數。函式引數說明如下:

    int nums[] 剩餘的被打亂順序的編號

    測試說明

    樣例1: 輸入:除15、48、56外的其餘9997個數組成的亂序陣列

    輸出:9

    樣例2: 輸入:除22、76、83外的其餘9997個數組成的亂序陣列

    輸出:5

#include<sstream>
int getLostScores(int num[])
{
    int i;
    int book[10001];
    for(i=0;i<9997;i++)
    {
        book[num[i]]=1;
    }
    long long sum=0;
    string res="",s;
    for(i=1;i<=10000;i++)
    {
        if(book[i]==0)
        {
            stringstream ss;
            ss<<i;//把i輸進ss
            ss>>s;//把ss輸進s
            res+=s;//字串相加
        }
    }
    stringstream ss(res);//讀取res中的單字
    ss>>sum;//ss中的值給sum
    return sum%11;
}