第十届蓝桥杯大赛个人赛省赛(软件类本科B组)做题笔记Partial

试题A:组队

题目略

Ans=490

解题思路:全排列解题:arr【20】数组,生成5个元素分别赋值为1,2,3,4,5 表示作为首发坑位编号,其余全为0:表示不选择作为首发。
全排列 遍历所有可能的首发阵容:若arr[i]!=0 则选择(i+1) 【因为 i 从 0~19 】号球员 作为 坑位 arr[i] 对应的球员;反之,continue ;得到对应的分值之和,不断比较,求出最大值。

Codes:
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int Pnts[20][5]={{97,90,0,0,0},{92,85,96,0,0},{0,0,0,0,93},{0,0,0,80,86},
    {89,83,97,0,0},{82,86,0,0,0},{0,0,0,87,90},{0,97,96,0,0},
    {0,0,89,0,0},{95,99,0,0,0},{0,0,96,97,0},{0,0,0,93,98},
    {94,91,0,0,0},{0,83,87,0,0},{0,0,98,97,98},{0,0,0,93,86},
    {98,83,99,98,81},{93,87,92,96,98},{0,0,0,89,92},{0,99,96,95,81}
};
int arr[20];
int maxPnt=0;
int player[5];
int res[5];

void check(){
    
    int thisPnt=0;
    for(int i=0;i<5;i++){
        int Plr=player[i];//选手Pos 
        thisPnt+=Pnts[Plr-1][i];
    }
    maxPnt=max(thisPnt,maxPnt);
}

int main(int argc, char** argv) {
    for(int i=0;i<20;i++){
        if(i<5)
            arr[i]=i+1;
        else
            arr[i]=0;
    }

sort(arr,arr+20);
    
    do{
        for(int i=0;i<20;i++){
            int num=arr[i];
            if(num!=0){
                player[num-1]=i+1;
            }
        }        
        
        check();
        
        
    }while(next_permutation(arr,arr+20));
    cout<<maxPnt<<endl;
    
    return 0;
}

试题B:年号子串

题目略

Excel 解题
Ans=BYQ

试题C:数列求值
Ans=4659

Codes:
#include <iostream>

using namespace std;

int A,B,C;
int tmp;

void simplify(int& num){
    if(num>1000000){
        int ws=num/1000000;
        num=num-ws*1000000;
    }
}

void move(){
    tmp=C+B;
    simplify(tmp);
    
    tmp+=A;
    simplify(tmp);
    
    A=B;
    B=C;
    C=tmp;

}

int main(int argc, char** argv) {
    A=3;
    B=5;
    C=9;
    
    for(long long i=7;i<=20190324;i++){
        move();
    }
    cout<<C<<endl;
    
    return 0;
}

试题D:数的分解

Ans=40785

解题思路:暴力解法 + 结构体==函数 重写  去重

#include <iostream>
#include <algorithm>
#include <string.h>
#include <sstream>
#include <vector>

using namespace std;

struct Nums{
    int A,B,C;
    Nums(int a,int b,int c):A(a),B(b),C(c){    }
    Nums(){    }
    
    bool operator ==(const Nums& N) const{//重写 判断 结构体 是否相等 的函数 
        if(A== N.A){
            if(B==N.B && C==N.C)// ABC -> N: ABC
                return true;
            else if(B==N.C && C==N.B)//ABC -> N: ACB
                return true;
            else 
                return false;    
        }
        else if(A==N.B){
            if(B==N.A && C==N.C)//ABC -> N:BAC
                return true;
            else if(B==N.C && C==N.A)//ABC -> N:BCA
                return true;
            else 
                return false;    
        }
        else if(A==N.C ){
            if(B==N.A && C==N.B)//ABC -> N: CAB
                return true;
            else if(B==N.B && C==N.A)//ABC -> N: CBA
                return true;
            else 
                return false;
        }
        else
            return false;
    }
};

int arr[2019];
vector<Nums> Existed;// 用于 去重 
int ans=0;

string ItoS(int x){
    stringstream is;
    is<<x;
    return is.str();
}

bool check(int x){
//    cout<<"start to check"<<endl;
    string sx=ItoS(x);
    
    for(int i=0;i<sx.size();i++){
        if(sx[i]=='2' || sx[i]=='4')
            return false;            //x 含有2或4,返回 false 
    }
    return true;// x 不含有 2 或 4,返回true 
    
}

void PrintVkt(){
    
    for(int i=0;i<Existed.size();i++){
        cout<<Existed[i].A<<" "<<Existed[i].B<<" "<<Existed[i].C<<"; ";
    }
    
}

void demo(){
    for(int i=1;i<2019;i++){
        if(check(i)){
            for(int j=i+1;j<2019;j++){
                if(check(j) && i+j<2019 && i!=j){
                    int k=2019-i-j;
                    Nums tmp(i,j,k);
                    if(k<=0)
                        break;
                    
                    if(  i!=k && j!=k && check(k) && find(Existed.begin(),Existed.end(),tmp)==Existed.end()  ){
                        ans++;
                        Existed.push_back(tmp);
                        if(ans%10000==0)
                            cout<<ans<<endl;
//                        PrintVkt();
                    }
                }
            }
        }    
    }
    
    
}

//暴力解法,用 结构体 存放3个数 进行去重
 
void testFind(vector<Nums>& vkt,Nums N1){
    if(find(vkt.begin(),vkt.end(),N1)==vkt.end())
        cout<<"no N1 in vkt"<<endl;
    else
        cout<<"find N1 in vkt"<<endl;
}

int main(int argc, char** argv) {
    demo();
    cout<<ans<<endl;

return 0;
}

试题E:迷宫

题目略

一共186步
Ans=DDDDRRURRRRRRDRRRRDDDLDDRDDDDDDDDDDDDRDDRRRURRUURRDDDDRDRRRRRRDRRURRDDDRRRRUURUUUUUUUULLLUUUURRRRUULLLUUUULLUUULUURRURRURURRRDDRRRRRDDRRDDLLLDDRRDDRDDLDDDLLDDLLLDLDDDLDDRRRRRRRRRDDDDDDRR

Codes:
#include <iostream>
#include <vector>
#include <string.h>
#include <queue>
#include <stack>

using namespace std;

struct Point{
    int val;
    int X,Y;//Point的坐标:行X,列Y
    int FX,FY;//BFS遍历得到最短路径 上 当前节点的 上一个节点 :行FX,列FY
    int steps;// BFS遍历到当前节点时,走过的步数
    Point(){    }
    Point(int xx,int yy,int fx=0,int fy=0,int stp=0){
        this->X=xx;
        this->Y=yy;
        this->FX=fx;
        this->FY=fy;
        this->steps=stp;
    } 
}G[502][502];//图

int N,M;//N行,M列
int vis[502][502];
int dir[][2]={ {-1,0},{0,1},{1,0},{0,-1} };//顺时针 四个方向:上、右、下、左 
queue<Point> Q;
char dir2[4]={'U','R','D','L'};
stack<char> way;

void Read(){
    cin>>N;
    string samp;
    for(int i=1;i<=N;i++){
        cin>>samp;
        for(int j=1;j<=samp.size();j++){
            G[i][j].X=i;//初始化每个 坐标 
            G[i][j].Y=j;
            
            G[i][j].val=samp[j-1]-'0';
        }
            
    }
    M=samp.size();
    
    memset(vis,0,sizeof(vis));
}

void PrintG(){
    
    for(int i=1;i<=N;i++){
        for(int j=1;j<=M;j++)
            cout<<G[i][j].val<<" ";
        cout<<endl;
    }
    
}

void moveOn(Point P){
    
    for(int i=0;i<4;i++){
        int toX=P.X+dir[i][0];
        int toY=P.Y+dir[i][1];
        
        if(toX>=1 && toX<=N && toY>=1 && toY<=M && vis[toX][toY]==0 && G[toX][toY].val==0 ){
            
            vis[toX][toY]=1;
            Point tmp(toX,toY,P.X,P.Y,P.steps+1);
            G[toX][toY]=tmp;
            Q.push(G[toX][toY]);
        }        
    }            
}

Point BFS(Point S){
    vis[S.X][S.Y]=1;
    Q.push(S);
    
    while(!Q.empty()){
        Point V=Q.front();
        Q.pop();
        if(V.X==N && V.Y==M)
            return V;
        
        moveOn(V);
    }
}

char getDir(Point P){//=> 当前节点的上一个节点  相对于 当前节点的方向     
    for(int i=0;i<4;i++){
        if(P.FX+dir[i][0]==P.X && P.FY+dir[i][1]==P.Y){
            return dir2[i];
        }
    }    
    return 'X';
}

int main(int argc, char** argv) {
    Read();
//    PrintG();
    
    G[1][1].steps=0;
    Point Final=BFS(G[1][1]);
    
    cout<<"Final.steps: "<<Final.steps<<endl;
    
    Point tmp=Final;
    while( !(tmp.X==1 && tmp.Y==1) ){
        way.push(getDir(tmp));
        tmp=G[tmp.FX][tmp.FY];
    }
    
    while(!way.empty()){
        char c=way.top();
        cout<<c;
        way.pop();
    }

return 0;
}

试题F:特别数的和

题目略

Codes:
#include <iostream>
#include <sstream>
#include <string.h>

using namespace std;

int n;//n<=10000

//数字中 包含 2、0 、1、9 的 
string ItoS(int x){
    ostringstream is;
    is<<x;
    return is.str();
}

bool check(int num){
    string sn=ItoS(num);
    int len=sn.size();
    for(int i=0;i<len;i++){
        if(sn[i]=='2' || sn[i]=='0' || sn[i]=='1' || sn[i]=='9')
            return true;
    }
    return false;
}

int main(int argc, char** argv) {
    cin>>n;
    
    long long sum=0;
    for(int i=1;i<=n;i++){
        if(check(i))
            sum+=i;
    }

cout<<sum<<endl;

return 0;
}

试题G:完全二叉树的权值

题目略

Codes:
#include <iostream>
#include <cmath>

using namespace std;

//深度为k的二叉树,最多有节点 2^k -1 个 
int tree[100006];
int n;

int level(int nodes){
    return ceil( log(nodes+1)/log(2) );    
}

int KthTotalNodes(int lvl){
    return pow(2,lvl)-1;
}

int main(int argc, char** argv) {
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>tree[i];
    
    
    int lvl=level(n);
    int amt[lvl+1];
    for(int i=1;i<=lvl;i++){//完全二叉树 ,每层最多2^(k-1)个 节点  
        if(i<lvl){
            for(int j=KthTotalNodes(i)+1;j<=pow(2,i-1)+KthTotalNodes(i);j++){
                amt[i]+=tree[j];
            }
        }
        else{
            for(int j=KthTotalNodes(i)+1;j<=n;j++){//最后一层 
                amt[i]+=tree[j];
            }
        }
    }

int thismax=0;
    int pos=-1;
    for(int i=1;i<=lvl;i++){
        if(amt[i]>thismax){
            thismax=amt[i];
            pos=i;
        }
    }
    cout<<pos<<endl;

return 0;
}

试题H:等差数列

题目略

Codes:
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

typedef long long LL;
LL N;
vector<LL> arr;
LL mind=1e9;//最小公差

int main(int argc, char** argv) {
    cin>>N;
    for(LL i=0;i<N;i++){
        LL x;
        cin>>x;
        arr.push_back(x);
    }
    sort(arr.begin(),arr.end());    
    
    for(LL i=1;i<N;i++){
        LL thisd=arr[i]-arr[i-1];
        mind=min(mind,thisd);
    }
    
    LL cnt=0;
    for(LL i=arr[0];;i+=mind){
        cnt++;
        
        if(i==arr[N-1])
            break;
    }

cout<<cnt<<endl;

return 0;
}

试题I:后缀表达式

题目略

Codes:
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

typedef long long LL;
LL N,M;//N各加号,M个减号,以及N+M+1个整数 
vector<LL> arr;

int main(int argc, char** argv) {
    cin>>N>>M;
    
    for(int i=1;i<=N+M+1;i++){
        LL x;
        cin>>x;
        arr.push_back(x);
    }

sort(arr.begin(),arr.end());
    
    LL sum=0;
    LL cnt=-1;
    for(LL i=arr.size()-1;i>=0;i--){
        sum+=arr[i];
        cnt++;
        if(cnt==N)
            break;    
    }
    
    for(LL i=0;i<M;i++){
        sum-=arr[i];
    }
    
    cout<<sum<<endl;

return 0;
}

第十届蓝桥杯大赛个人赛省赛(软件类本科B组)做题笔记Partial相关推荐

  1. 第九届蓝桥杯大赛个人赛决赛(软件类本科B组)做题笔记和订正

    标题:换零钞 x星球的钞票的面额只有:100元,5元,2元,1元,共4种. 小明去x星旅游,他手里只有2张100元的x星币,太不方便,恰好路过x星银行就去换零钱. 小明有点强迫症,他坚持要求200元换 ...

  2. 第九届蓝桥杯大赛个人赛决赛(软件类)C大学B组 题解

    因能力有限,题解部分参照前辈想法,并加以博主思考. 如有不足,欢迎指正~! 目录 试题A: 换零钞 试题B: 激光样式 试题C: 格雷码 试题D: 调手表 试题E: 搭积木(待解决) 试题F: 矩阵求 ...

  3. 第六届蓝桥杯大赛个人赛决赛(软件类)真题-Java语言B组

    目录 1.分机号 2.五星填数 3.显示二叉树 4.穿越雷区 5.表格计算 6.铺瓷砖 1.分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位 ...

  4. 第六届蓝桥杯大赛个人赛决赛(软件类) C++A组真题题解

    文章目录 题目链接 A组真题 题目结构 第一题 方格填数 第二题 四阶幻方 第三题 显示二叉树 第四题 穿越雷区 第五题 切开字符串 第六题 铺瓷砖(待补) 题目链接 A组真题 题目结构 题目 类型 ...

  5. 第六届蓝桥杯大赛个人赛决赛(软件类)真题 Java语言B组 答案

    标题:分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如: 751,520,321 都满足要求,而, 766,918,201 就不符合要 ...

  6. 第七届蓝桥杯大赛个人赛决赛(软件类)真题 Java语言B组 答案

    以下代码纯自想自打,如有误,请提出,如可简,请告之,谢谢大家了. 蓝桥杯辅助资料 真题下载 1 愤怒小鸟 X星球愤怒的小鸟喜欢撞火车! 一根平直的铁轨上两火车间相距 1000 米 两火车 (不妨称A和 ...

  7. 第十届蓝桥杯大赛个人赛省赛(软件类)真题

    组队 第一种直接看 第二种枚举 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStrea ...

  8. 第六届蓝桥杯大赛个人赛决赛(软件类)真题

    分号机 import java.io.IOException; class MC{public void run(){int cnt = 0;for (int i = 9; i >= 0; i- ...

  9. 第九届蓝桥杯大赛个人赛决赛(软件类)真题--C大学B组--换零钞题解(C语言)

    标题:换零钞 x星球的钞票的面额只有:100元,5元,2元,1元,共4种. 小明去x星旅游,他手里只有2张100元的x星币,太不方便,恰好路过x星银行就去换零钱. 小明有点强迫症,他坚持要求200元换 ...

  10. 蓝桥杯的c语言编译器,第九届蓝桥杯大赛个人赛省赛(软件类)C/C++ 大学B组比赛心得(还在更新)...

    第九届蓝桥杯大赛个人赛省赛(软件类)C/C++ 大学B组 考生须知: 考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试题. 考试时间为4小时.时间截止后,提交答案无效. 在考试强制结束 ...

最新文章

  1. iOS: 在Object-C中监听javascript事件( Javascript communicating back with Objective-C code)
  2. 在linux命令行中直接执行php命令
  3. 【PKUSC2019】线弦图【计数】【树形DP】【分治FFT】
  4. Grub2主题修改和美化--------LinuxWindows
  5. 分布式认知在计算机应用系统,人机交互作业
  6. 基于USB通信的开关量输入输出板
  7. java数据结构基础名词解释
  8. SQL Server 数据文件的页面分部情况
  9. Fixjs——自定义事件处理
  10. 拓端tecdat|R语言中进行期权定价的Heston模型
  11. SecureCRT和SecureFX的下载和安装2022
  12. 海康威视硬盘录像机怎么连接萤石云
  13. MySQL手册chm格式文档
  14. SPSS数据处理-数据整理
  15. 2016中国云计算技术大会精彩PPT干货分享
  16. 获取最新中国行政区划
  17. 个性化精简掉了Win10便签顶部如何恢复
  18. python自动化操作电脑的简单实现
  19. 北海屠龙记------十二
  20. 【概念辨析】二维数组传参的几种可能性

热门文章

  1. 再说打日志你不会,pm2 + log4js,你值得拥有
  2. ros 控制xbox_从提示框:在Windows中控制Xbox控制器,在夏天保持计算机凉爽以及DIY图书扫描装置...
  3. C++Comb Sort梳排序的实现算法(附完整源码)
  4. ORACLE的语言从中文修改为英文
  5. 小人物吃金币_android小游戏(1)
  6. 一览数据异步加载的解决方案
  7. Cutter - Cut Crop Video for Mac(视频剪辑格式转换工具)
  8. JavaEE | 语言基础部分、对象与类
  9. Jenkins不能正常trigger
  10. 新增spring Converter解析器中使用lambda表达式代替匿名内部类是启动报错:... does the class parameterize those types?