2022-1-22

2022-1-22,第1张

2022-1-22 填空一:组队

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

作为篮球队教练,你需要从以下名单中选出 1 号未至 5 号位各一名球员,组成球队的首发阵容。 每位球员担任 1 号未至 5 号位时的评分如下表所示。请你计算首发阵容 1 号未至 5 号位的评分之和最大可能是多少?

题目给出如上图所示内容zai记事本中:http://oj.ecustacm.cn/upload/file/20200122/20200122152423_34129.txthttp://oj.ecustacm.cn/upload/file/20200122/20200122152423_34129.txt

运行限制

最大运行时间:1s最大运行内存: 128M

具体的数据 *** 作:打开记事本==》选数据之间的分隔符==》编辑==》替换成Tab键==》复制到Excel中==》复制数据==》在Excel中粘贴(选择性粘贴)==》转置==》再复制到记事本把分隔符换成逗号==》加上花括号即可复制到程序中使用!

代码运行:

#include 
using namespace std;

int main()
{
    int a[]={97,92,0,0,89,82,0,0,0,95,0,0,94,0,0,0,98,93,0,0};
    int b[]={90,85,0,0,83,86,0,97,0,99,0,0,91,83,0,0,83,87,0,99};
    int c[]={0,96,0,0,97,0,0,96,89,0,96,0,0,87,98,0,99,92,0,96};
    int d[]={0,0,0,80,0,0,87,0,0,0,97,93,0,0,97,93,98,96,89,95};
    int e[]={0,0,93,86,0,0,90,0,0,0,0,98,0,0,98,86,81,98,92,81};
    int ma=0,i,j,k,m,n;
    for(i=0;i<20;i++){
        for(j=0;j<20;j++){
            for(k=0;k<20;k++){
                for(m=0;m<20;m++){
                    for(n=0;n<20;n++){
                        if(j!=i&&k!=i&&k!=j&&m!=i&&m!=j&&m!=k&&n!=i&&n!=j&&n!=k&&n!=m){
                            if(a[i]+b[j]+c[k]+d[m]+e[n]>ma)
                                ma=a[i]+b[j]+c[k]+d[m]+e[n]; 
                        }
                    }
                }
            }
        }
    }
    cout< 

答案:490

填空二:年号字串

题目描述

小明用字母A 对应数字1,B 对应2,以此类推,用Z 对应26。对于27以上的数字
小明用两位或更长位的字符串来对应,例如AA 对应27,AB 对应28,AZ 对应52,LQ 对应329。
请问2019 对应的字符串是什么?

方法一(最快)使用Excel表:

可以发现Excel表列的编号就是按照以上规则来的,因此,可以在第一列填一个1,在向右拖动到第2019,则可以快速得到答案!BYQ。

方法二:编程

那我们就是求在 10 进制下的 2019 在 26 进制下如何表示的。

思路:先推算是2019用几位数表示?A~Z:1~26;AA~ZZ:27~26*26+26=702`;所以2019有3位

代码实现:

#include 
using namespace std;

int main()
{
    int num=702;
    char i,j,k;
    for(i='A';i<='Z';i++){
        for(j='A';j<='Z';j++){
            for(k='A';k<='Z';k++){
                num++;
                if(num==2019){
                    cout< 
填空三:数列求值 

题目描述

给定数列1, 1, 1, 3, 5, 9, 17, …,从第4 项开始,每项都是前3 项的和。求第20190324 项的最后4 位数字。      答案:4659

类比:斐波那契数列

注意:由于增长速度非常快,long long 都存不下,因此不能直接计算第20190324项等于几再填最后四位!!!因此需要利用“同余理论”!

 代码实现:

#include 
using namespace std;

int s[20190325]={0,1,1,1};
int main()
{   
    for(int i=4;i<20190325;i++){
        s[i]=s[i-1]+s[i-2]+s[i-3];
        s[i]=s[i]%10000;
    }
    cout< 

代码改进:

#include 
using namespace std;

int main()
{   
    int s1=1,s2=1,s3=1,s4;
    for(int i=4;i<=20190324;i++){
        s4=(s1+s2+s3)%10000;
        s1=s2;
        s2=s3;
        s3=s4;
    }
    cout< 
填空四:数的分解 

题目描述

把2019分解成3个各不相同的正整数之和,并且要求每个正整数都不包含数字2和4,一共有多少种不同的分解方法?注意交换3个整数的顺序被视为同一种方法。     答案:40785

例如: 1000+1001+18和 1001+1000+18 被视为同一种。

解题思路

定义三个各不相同的正整数为 i, j ,k 并且必须满足 i < j < k​​ 这样就不存在交换任意俩个导致重复了

一般来说我们枚举 i 从 1 - 2019,枚举 j 从 1 - 2019,再枚举 k 从1 - 2019,三个 for 循环的复杂度计算机多跑一会应该也能出的来答案。

那么考虑最内层的 k ,当 i,j 确定了之后, k 的值自然而然就是确定的,那么俩个 for 循环的复杂度就是快很多了,剩下的只要检查 i,j,k 是否满足题目说的不含 2 和 4。

代码实现:

#include 
using namespace std;

bool check(int x){
    while(x)
    {
        if(x%10==2||x%10==4)
            return false;
        else{
            x = x/10;
        }
    }
    return true;
}
int main()
{
    int ans=0;
    int i,j,k;
    for(i=1;i<=2019;i++){
        for(j=i+1;j<=2019;j++){//j>i;k>j==>保证不会因顺序重复
            k=2019-i-j;
            if(check(i)&&check(j)&&check(k)&&j 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5711515.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存