第十届蓝桥杯大赛个人赛省赛(软件类本科B组)做题笔记Partial
第十届蓝桥杯大赛个人赛省赛(软件类本科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相关推荐
- 第九届蓝桥杯大赛个人赛决赛(软件类本科B组)做题笔记和订正
标题:换零钞 x星球的钞票的面额只有:100元,5元,2元,1元,共4种. 小明去x星旅游,他手里只有2张100元的x星币,太不方便,恰好路过x星银行就去换零钱. 小明有点强迫症,他坚持要求200元换 ...
- 第九届蓝桥杯大赛个人赛决赛(软件类)C大学B组 题解
因能力有限,题解部分参照前辈想法,并加以博主思考. 如有不足,欢迎指正~! 目录 试题A: 换零钞 试题B: 激光样式 试题C: 格雷码 试题D: 调手表 试题E: 搭积木(待解决) 试题F: 矩阵求 ...
- 第六届蓝桥杯大赛个人赛决赛(软件类)真题-Java语言B组
目录 1.分机号 2.五星填数 3.显示二叉树 4.穿越雷区 5.表格计算 6.铺瓷砖 1.分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位 ...
- 第六届蓝桥杯大赛个人赛决赛(软件类) C++A组真题题解
文章目录 题目链接 A组真题 题目结构 第一题 方格填数 第二题 四阶幻方 第三题 显示二叉树 第四题 穿越雷区 第五题 切开字符串 第六题 铺瓷砖(待补) 题目链接 A组真题 题目结构 题目 类型 ...
- 第六届蓝桥杯大赛个人赛决赛(软件类)真题 Java语言B组 答案
标题:分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如: 751,520,321 都满足要求,而, 766,918,201 就不符合要 ...
- 第七届蓝桥杯大赛个人赛决赛(软件类)真题 Java语言B组 答案
以下代码纯自想自打,如有误,请提出,如可简,请告之,谢谢大家了. 蓝桥杯辅助资料 真题下载 1 愤怒小鸟 X星球愤怒的小鸟喜欢撞火车! 一根平直的铁轨上两火车间相距 1000 米 两火车 (不妨称A和 ...
- 第十届蓝桥杯大赛个人赛省赛(软件类)真题
组队 第一种直接看 第二种枚举 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStrea ...
- 第六届蓝桥杯大赛个人赛决赛(软件类)真题
分号机 import java.io.IOException; class MC{public void run(){int cnt = 0;for (int i = 9; i >= 0; i- ...
- 第九届蓝桥杯大赛个人赛决赛(软件类)真题--C大学B组--换零钞题解(C语言)
标题:换零钞 x星球的钞票的面额只有:100元,5元,2元,1元,共4种. 小明去x星旅游,他手里只有2张100元的x星币,太不方便,恰好路过x星银行就去换零钱. 小明有点强迫症,他坚持要求200元换 ...
- 蓝桥杯的c语言编译器,第九届蓝桥杯大赛个人赛省赛(软件类)C/C++ 大学B组比赛心得(还在更新)...
第九届蓝桥杯大赛个人赛省赛(软件类)C/C++ 大学B组 考生须知: 考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试题. 考试时间为4小时.时间截止后,提交答案无效. 在考试强制结束 ...
最新文章
- iOS: 在Object-C中监听javascript事件( Javascript communicating back with Objective-C code)
- 在linux命令行中直接执行php命令
- 【PKUSC2019】线弦图【计数】【树形DP】【分治FFT】
- Grub2主题修改和美化--------LinuxWindows
- 分布式认知在计算机应用系统,人机交互作业
- 基于USB通信的开关量输入输出板
- java数据结构基础名词解释
- SQL Server 数据文件的页面分部情况
- Fixjs——自定义事件处理
- 拓端tecdat|R语言中进行期权定价的Heston模型
- SecureCRT和SecureFX的下载和安装2022
- 海康威视硬盘录像机怎么连接萤石云
- MySQL手册chm格式文档
- SPSS数据处理-数据整理
- 2016中国云计算技术大会精彩PPT干货分享
- 获取最新中国行政区划
- 个性化精简掉了Win10便签顶部如何恢复
- python自动化操作电脑的简单实现
- 北海屠龙记------十二
- 【概念辨析】二维数组传参的几种可能性
热门文章
- 再说打日志你不会,pm2 + log4js,你值得拥有
- ros 控制xbox_从提示框:在Windows中控制Xbox控制器,在夏天保持计算机凉爽以及DIY图书扫描装置...
- C++Comb Sort梳排序的实现算法(附完整源码)
- ORACLE的语言从中文修改为英文
- 小人物吃金币_android小游戏(1)
- 一览数据异步加载的解决方案
- Cutter - Cut Crop Video for Mac(视频剪辑格式转换工具)
- JavaEE | 语言基础部分、对象与类
- Jenkins不能正常trigger
- 新增spring Converter解析器中使用lambda表达式代替匿名内部类是启动报错:... does the class parameterize those types?