全国计算机绿色大赛(第二阶段)

  • 挑战任务

    绿盟和各大名企合作,举办编程能力大赛,需要选拔一支参赛队伍。队伍成员全部来自“绿盟杯”中表现优秀的同学,每个同学都根据在比赛中的表现被赋予了一个能力值。现在被召集的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];
//i表示第几个元素,j表示被选取的第几个元素,k表示选或不选
        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;
}		

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值