<蓝桥杯软件赛>零基础备赛20周--第5周--杂题-2

报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集
20周的完整安排请点击:20周计划
每周发1个博客,共20周(读者可以按自己的进度选“正常”和“快进”两种计划)。
每周3次集中答疑
,周三、周五、周日晚上,在QQ群上答疑:

在这里插入图片描述

文章目录

  • 0. 上周答疑
  • 1. 精讲题
    • 1.1 修剪灌木
    • 1.2 英文数字计数
    • 1.3 矩形拼接
    • 1.4 最少砝码
    • 1.5 蜂巢
    • 1.6 立方体表面距离
  • 2. 刷题

第 4周:  杂题-2

0. 上周答疑

  伪代码怎么转化Java语言?
  C/C++、Java、Python代码怎么互转?
  回答:用大数据模型转,例如文心一言3.5,是免费的。
  在转换代码这件事上,大数据模型做得很好。
在这里插入图片描述

1. 精讲题

  本周还是杂题!
  大家是不是感到太慢了,什么时候才学数据结构、算法呢?我想立刻现在马上学:二分、排序、二叉树、DFS、…
  不要着急,杂题做得越多,后面的学习越高效越快!
  一是提高编码能力!争取做到:一次写20行代码,不用调试一次过!
  二是算法能力!杂题虽然没用到经典算法,但它们的解题步骤其实也是算法,有时难度不亚于经典算法。
  下面给出6个精讲题,有模拟、构造、思维、数学等各种杂题,难度从简单到难。大家自己先做,然后再看题解。

1.1 修剪灌木

难度 **
2022年第十三届省赛:链接1-蓝桥OJ 、链接2-NewOj
题解】这是一道思维题。由于每棵灌木都会在2N天内被剪为0,所以不会无限长高。其中的第i棵,它左边有i-1棵,右边有n-i棵。爱丽丝分别从左右绕回来,各需要2i和2(n-i-1)天,取最大值就是高度。i从0开始。
(1)C/C++代码

#include<bits/stdc++.h>
using namespace std;
int main() {int n;  cin >> n;for (int i = 0; i < n; i++)   cout << max(i, n - i - 1) * 2 << endl;return 0;
}

(2)python代码

n = int(input())
for i in range (n): print(max(i,n-i-1)*2)

(3)java代码

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();for (int i = 0; i < n; i++) {System.out.println(Math.max(i, n - i - 1) * 2);}}
}

1.2 英文数字计数

见博客:英文数字计数
难度 ***

1.3 矩形拼接

2022年第十三届省赛: 链接-NewOJ
难度 *** 准确地说,难度有3.5颗星
题解】本题是一道纯粹的构造题,思维简单,但是代码比较繁琐细致,目的是考核编码能力。
  3个矩形摆在一起,可能有几个边?读者可以在纸上手画观察,如果3个矩形完全不能匹配,是8边形;如果能完全匹配成一个新矩形,是4边形;其他情况是6边形。
  本题只有3个矩形,并不复杂。3个矩形做任意组合,每个矩形有横竖两种摆法,共48种情况。T = 1000组测试,总计算量是1000×48,计算量很小不会超时,所以简单地用暴力法组合出所有情况,取最小值即可。
(1)C/C++代码
  下面的C++代码,第10 ~ 14行,对3个矩形进行组合。第15 ~ 17行,每个矩形有横和竖两种摆法。
  第18行,如果一个矩形的边长等于另外两个矩形边长之和,那么至少是6个边。然后第20行,如果这两个矩形边长相等,那么就是4个边。后面几行请自己分析。

#include<bits/stdc++.h>
using namespace std;
int a[3][2];
int main(){int T;    cin >> T;while(T--)    {for(int i = 0; i < 3; i++)cin >> a[i][0] >> a[i][1];int ans = 8;for(int i = 0; i < 3; i++)               //第1个矩形for(int j = 0; j < 3; j++)if(i != j)                       //第2个矩形for(int k = 0; k < 3; k++)if(k != i && k != j)     //第3个矩形for(int ii = 0; ii <= 1; ii++){           //第1个有横竖两种摆法for(int jj = 0; jj <= 1; jj++){       //第2个横竖摆for(int kk = 0; kk <= 1; kk++){   //第3个横竖摆if(a[i][ii] == a[j][jj] + a[k][kk]){ ans = min(ans, 6);if(a[j][1-jj] == a[k][1-kk])ans = min(ans, 4);}if(a[i][ii] == a[j][jj] || a[j][jj] == a[k][kk])ans = min(ans, 6);if(a[i][ii] == a[j][jj] && a[j][jj] == a[k][kk])ans = min(ans, 4);}}}cout<<ans<<endl;}return 0;
}

(2)python代码

def check1(x1,x2,x3):if x1>=x2 and x1>=x3:if x1==x2+x3 and a[2]+a[3]-x2==a[4]+a[5]-x3:  return Trueif x2>=x1 and x2>=x3:if x2==x1+x3 and a[0]+a[1]-x1==a[4]+a[5]-x3:  return Trueif x3>=x1 and x3>=x2:if x3==x1+x2 and a[0]+a[1]-x1==a[2]+a[3]-x2:  return Truereturn False
def check2(x1,x2,x3):if x1>=x2 and x1>=x3:if x1==x2+x3:    return Trueif x2>=x1 and x2>=x3:if x2==x1+x3:    return Trueif x3>=x1 and x3>=x2:if x3==x1+x2:    return Truereturn FalseT = int(input())
for t in range(T):a=list(map(int,input().split()))ans=8for i in range(0,2):              #第1个矩形for j in range(2,4):          #第2个矩形for k in range(4,6):      #第3个矩形x1,x2,x3 = a[i],a[j],a[k]if x1==x2 and x2==x3:          ans = min(ans,4)if check1(x1,x2,x3):           ans = min(ans,4)if x1==x2 or x1==x3 or x2==x3: ans = min(ans,6)if check2(x1,x2,x3):           ans = min(ans,6)print(ans)

(3)java代码

import java.util.*;
import java.io.*; 
public class Main { public static void main(String[] args) {Scanner in = new Scanner(System.in);int T = in.nextInt();for(int _t = 1; _t <= T; _t++){int[][] a = new int[3][2];int ans = 8;for(int i = 0; i < 3; i++) {a[i][0] = in.nextInt();a[i][1] = in.nextInt();}//枚举第一个矩形下标为i,第二个矩形下标为j,第三个矩形下标为kfor(int i = 0; i < 3; i++)for(int j = 0; j < 3; j++)if(i != j)for(int k = 0; k < 3; k++)if(i != k && j != k)//枚举三个矩形的两条边for(int ii = 0; ii <= 1; ii++)for(int jj = 0; jj <= 1; jj++)for(int kk = 0; kk <= 1; kk++) {if(a[i][ii] == a[j][jj])//6条边的情况1ans = Math.min(ans, 6);if(a[i][ii] == a[j][jj] && a[i][ii] == a[k][kk])//4条边的情况1ans = Math.min(ans, 4);//枚举仅考虑a[i][ii] 与 a[j][jj] + a[k][kk]的关系if(a[i][ii] == a[j][jj] + a[k][kk])  {ans = Math.min(ans, 6);     //6条边的情况2if(a[j][1 - jj] == a[k][1 - kk])    //4条边的情况2ans = Math.min(ans, 4);}}System.out.println(ans);}}
}

1.4 最少砝码

2021年第十二届蓝桥杯省赛: 链接1-蓝桥OJ
难度 ***
题解】这是一道找规律题。
  题目要求给出最少数量的几个整数(砝码),通过加减组合得到1 ~ N的整数。熟悉二进制的都知道,用1、2、4、8、16、…这些2的倍数,可以组合后相加得到任意整数。不过,本题的砝码不仅可以相加,还可以放在天平的两边通过减法得到新的称重。例如N = 3时,砝码可以是{1, 2},也可以是{1, 3}、{2, 3}。
  本题的思维有一点难度,读者如果自己提前做了此题,思维过程可能比较繁琐。下面给出一种简洁的推理方法。
  设当前砝码称重范围是1 ~ R。加一个砝码w,并且要求不重复加w前已经能得到的称重,那么w将是一个很大的砝码。新的称重范围是:
    {1, 2, …, R, w-R, w-R+1,…, w, w+1, w+2, …, w+R}
  因为从R到w-R是连续的,所以有w-R = R+1,即w = 2R+1。也就是说,如果当前称重范围是1 ~ R,那么加一个w = 2R+1的砝码,可以扩展到新的称重范围R’= w+R = 3R+1。
  下面列表计算,每一行的“原砝码,原称重范围”是上一行的“新砝码,新称重范围”。
在这里插入图片描述
  这个表格给出了一种最少砝码的实现方式,虽然可能有其他实现方式,但这种实现方式最大程度扩展了新的R’,是一种最优方案。
  根据这个表格可以得到计算方法:(1)砝码按3的倍数增长;(2)每加一个砝码,称重范围增长到R’ = 3R+1。
  R按3倍增长,这比二进制的倍增还快,当N = 1 0 9 10^9 109时,计算量 l o g 3 N log_3N log3N < l o g 2 N log_2N log2N = 30。

(1)C/C++代码

#include <stdio.h>
int main() {int N;scanf("%d", &N);int R = 1;int cnt = 1;while (R < N) {R = R * 3 + 1;cnt++;}printf("%d", cnt);return 0;
}

(2)python代码

N = int(input())
R = 1 
cnt = 1
while R < N:R = R*3 + 1cnt += 1
print(cnt)

(3)java代码

import java.util.*;
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int N = scanner.nextInt();int R = 1;int cnt = 1;while (R < N) {R = R * 3 + 1;cnt++;}System.out.println(cnt);}
}

1.5 蜂巢

2022年第十三届省赛: [链接1-蓝桥OJ]
难度 ****
题解】本题是一道构造题,考点有两个:坐标转换、距离计算。
  蜂巢有6个方向,看起来比较复杂,但实际上走步非常简单,例如样例中从B走到C,C在B的右下方,B只要一直向右向下走,且不超过C的行和列,不管怎么走,一定能以最小步数走到C。
  本题的难点是对坐标的处理。如果是简单的直角坐标系,很容易计算。本题是六角形的蜂巢,每个蜂巢的中心点是否能转为直角坐标?把蜂巢的关系用下面的直角坐标表示:
在这里插入图片描述
  中心点O,对应的6个蜂巢的坐标分别为(-2, 0)、(-1, 1)、(1, 1)、(2, 0)、(1, -1)、(-1, -1),下面代码中用xdir[]、ydir[]表示。
  先计算得到起点坐标(x1, y1)、终点坐标(x2, y2)。如何计算起点到终点的步数?由于蜂巢的坐标比较奇怪,不能直接用“曼哈顿距离[ 曼哈顿距离,又称为出租车距离:两点的距离等于x方向上的距离加上y方向上的距离,即|x1-x2| + |y1-y2|。]”计算。读者如果已经做了这一题,可能是用各种复杂的判断来计算的。下面给出一个简单巧妙的方法。
  坐标之差的绝对值dx = |x1-x2|,dy = |y1-y2|,有以下结论:
  1、若dx ≥ dy,那么最少步数是(dx+dy)/2,即先横着走,再斜着走;
  2、若dx < dy,一直斜着走就行,最少步数是dy。

(1)C/C++代码
  代码中有一个地方需要注意,即坐标值应该用long long,如果用int会溢出。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll xdir[] = {-2,-1,1,2, 1,-1};  //横向
ll ydir[] = { 0, 1,1,0,-1,-1};  //纵向
void walk(ll d, ll q, ll &x, ll &y){x += xdir[d] * q;y += ydir[d] * q;           //引用传参,返回坐标值(x,y)
}
int main(){ll d1,p1,q1,d2,p2,q2;cin>>d1>>p1>>q1>>d2>>p2>>q2;ll x1 = 0, y1 = 0;           //计算起点坐标(x1, y1)walk(d1,p1,x1,y1);           //先走第1个方向walk((d1 + 2) % 6,q1,x1,y1); //再走第2个方向ll x2 = 0, y2 = 0;           //计算终点坐标(x2, y2)walk(d2,p2,x2,y2);walk((d2 + 2) % 6,q2,x2,y2);ll dx = abs(x1 - x2), dy = abs(y1 - y2);if (dx >= dy) cout << (dx+dy)/2;      //先横走,再斜着走else          cout << dy;              //一直斜着走就行了
}

(2)python代码

xdir = [-2,-1,1,2, 1,-1]
ydir = [ 0, 1,1,0,-1,-1]
def walk(d, q,x,y):  x += xdir[d]*qy += ydir[d]*qreturn x,y
d1,p1,q1,d2,p2,q2 = map(int,input().split())
x1, y1 = walk(d1,p1,0,0)
x1, y1 = walk((d1 + 2) % 6, q1,x1,y1)
x2, y2 = walk(d2,p2,0,0)
x2, y2 = walk((d2 + 2) % 6, q2,x2,y2)
dx,dy = abs(x1 - x2), abs(y1 - y2);
if (dx >= dy): print((dx+dy)//2)     #先横走,再斜着走
else:          print(dy)             #一直斜着走 

(3)java代码

import java.util.*;
public class Main {static long[] xdir = {-2, -1, 1, 2, 1, -1}; //横向static long[] ydir = {0, 1, 1, 0, -1, -1}; //纵向static void walk(int d, long q, long[] pos) {pos[0] += xdir[d] * q;pos[1] += ydir[d] * q;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int d1 = scanner.nextInt();long p1 = scanner.nextLong();long q1 = scanner.nextLong();int d2 = scanner.nextInt();long p2 = scanner.nextLong();long q2 = scanner.nextLong();long[] pos1 = {0, 0};walk(d1, p1, pos1);walk((d1 + 2) % 6, q1, pos1);long[] pos2 = {0, 0};walk(d2, p2, pos2);walk((d2 + 2) % 6, q2, pos2);long dx = Math.abs(pos1[0] - pos2[0]);long dy = Math.abs(pos1[1] - pos2[1]);if (dx >= dy)  System.out.println((dx + dy) / 2);else           System.out.println(dy);        }
}

1.6 立方体表面距离

见博客:立方体表面距离
难度 *****

2. 刷题

  还是继续刷题吧。上周的题目链接,大家接着做:

  蓝桥题库的模拟题-简单
  蓝桥题库的模拟题-中等
  蓝桥题库的模拟题-困难

  蓝桥题库的枚举题-简单
  蓝桥题库的枚举题-中等
  蓝桥题库的枚举题-困难

  蓝桥题库的递归题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/187435.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一题三解(暴力、二分查找算法、单指针):鸡蛋掉落

涉及知识点 暴力、二分查找算法、单指针 题目 给你 k 枚相同的鸡蛋&#xff0c;并可以使用一栋从第 1 层到第 n 层共有 n 层楼的建筑。 已知存在楼层 f &#xff0c;满足 0 < f < n &#xff0c;任何从 高于 f 的楼层落下的鸡蛋都会碎&#xff0c;从 f 楼层或比它低的…

3DMAX汽车绑定动画模拟插件MadCar疯狂汽车使用教程

3DMAX汽车绑定动画模拟插件MadCar疯狂的汽车&#xff0c;用于通过模拟控制来快速装配轮式车辆及其动画。这个新版本允许装配任何数量的车轮的车辆&#xff0c;以及包括摩托车在内的任何相互布置。还支持任意数量的拖车。 每个车轮和悬架都有简化的行为设置以及微调&#xff0c…

【微服务专题】手写模拟SpringBoot

目录 前言阅读对象阅读导航前置知识笔记正文一、工程项目准备1.1 新建项目1.1 pom.xml1.2 业务模拟 二、模拟SpringBoot启动&#xff1a;好戏开场2.1 启动配置类2.1.1 shen-base-springboot新增2.1.2 shen-example客户端新增启动类 三、run方法的实现3.1 步骤一&#xff1a;启动…

RAW图像处理软件Capture One 23 Enterprise mac中文版功能特点

Capture One 23 Enterprise mac是一款专业的图像处理软件&#xff0c;旨在为企业用户提供高效、快速和灵活的工作流程。 Capture One 23 Enterprise mac软件的特点和功能 强大的图像编辑工具&#xff1a;Capture One 23 Enterprise提供了一系列强大的图像编辑工具&#xff0c;…

TensorFlow学习笔记--(1)张量的随机生成

张量的生成 如何判断一个张量的维数&#xff1a;看张量的中括号有几层 0 1 2 &#xff1a;零维数列 [2 4 6] : 一维向量 [ [1 2 3] [4 5 6] ] : 二维数组 两行三列 第一行数据为 1 2 3 第二行数据为 4 5 6 以此类推 n维张量有n层中括号 tf.zeros(%指定一个张量的维数%) 生成一…

Django如何创建表关系,Django的请求声明周期流程图

【1】表与表之间的关系 一对一 左表的一条记录对应右表的一条记录&#xff0c;反之亦然 多对一 左表的一条记录对应右表的多条记录&#xff0c;反之不成立 多对多 左表的一条记录对应右表的多表记录&#xff0c;反之成立 【2】django中创建表关系 class Book(models.Model):t…

canvas 曲线图 双数值轴 山峰图

下面的代码本人亲自撰写&#xff0c;原生不易啊。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>D…

CSS3 用户界面、图片、按钮

一、CSS3用户界面&#xff1a; 在CSS3中&#xff0c;增加了一些新的用户界面特性来调整元素尺寸、框尺寸和外边框。CSS3用户界面属性&#xff1a;resize、box-sizing、outline-offset。 1、resize&#xff1a; resize属性指定一个元素是否应该由用户去调整大小。 <style…

Azure 机器学习 - 有关为 Azure 机器学习配置 Kubernetes 群集的参考

目录 受支持的 Kubernetes 版本和区域建议的资源计划ARO 或 OCP 群集的先决条件禁用安全增强型 Linux (SELinux)ARO 和 OCP 的特权设置 收集的日志详细信息Azure 机器学习作业与自定义数据存储连接支持的 Azure 机器学习排斥和容许最佳实践 通过 HTTP 或 HTTPS 将其他入口控制器…

DAY50 309.最佳买卖股票时机含冷冻期 + 714.买卖股票的最佳时机含手续费

309.最佳买卖股票时机含冷冻期 题目要求&#xff1a;给定一个整数数组&#xff0c;其中第 i 个元素代表了第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;: 你不…

vue2+elementui使用MessageBox 弹框$msgbox自定义VNode内容:实现radio

虽说实现下面的效果&#xff0c;用el-dialog很轻松就能搞定。但是这种简单的交互&#xff0c;我更喜欢使用MessageBox。 话不多说&#xff0c;直接上代码~ <el-button type"primary" size"mini" click"handleApply()" >处理申请</el-b…

【Git】Git图形化工具SSH协议IDEA集成Git的使用讲解

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Git》。&#x1f3af;&#x1f3af; &#x1f449…

git命令之遭遇 ignore罕见问题解决

我先来讲讲背景 我的一些文件在ignore了&#xff0c;不会被提交到远程仓库&#xff0c;这时候我的远程仓库中是没有这几个文件的&#xff0c;这时候我如果使用 git reset 的话这时候除了那几个 ignore 的文件以外都被更新的&#xff0c;但是如果我不需要这几个被 ignore 的文件…

蓝桥杯之模拟与枚举day1

Question1卡片(C/CA组第一题) 这个是一道简单的模拟枚举题目&#xff0c;只要把对应每次的i的各个位都提取出来&#xff0c;然后对应的卡片数目减去1即可。属于打卡题目。注意for循环的特殊使用即可 #include <iostream> using namespace std; bool solve(int a[],int n…

NSS [鹏城杯 2022]压缩包

NSS [鹏城杯 2022]压缩包 考点&#xff1a;条件竞争/逻辑漏洞&#xff08;解压失败不删除已经解压文件&#xff09; 参考&#xff1a;回忆phpcms头像上传漏洞以及后续影响 | 离别歌 (leavesongs.com) 源码有点小多 <?php highlight_file(__FILE__);function removedir($…

大模型+人形机器人,用AI唤起钢筋铁骨

《经济参考报》11月8日刊发文章《多方布局人形机器人赛道,智能应用前景广》。文章称&#xff0c;工信部日前印发的《人形机器人创新发展指导意见》&#xff0c;按照谋划三年、展望五年的时间安排&#xff0c;对人形机器人创新发展作了战略部署。 从开发基于人工智能大模型的人…

CCLink转Modbus TCP网关_MODBUS报文配置

兴达易控CCLink转Modbus TCP网关是一种功能强大的设备&#xff0c;可实现两个不同通信协议之间的无缝对接。它能够将CCLink协议转换为Modbus TCP协议&#xff0c;并通过报文配置实现灵活的通信设置。兴达易控CCLink转Modbus TCP网关可以轻松实现CCLink和Modbus TCP之间的数据转…

汇编-EQU伪指令(数值替换)

EQU伪指令将一个符号名称与一个整数表达式或一个任意文本相关联&#xff0c; 它有3种格式 在第一种格式中&#xff0c; expression必须是一个有效的整数表达式。在第二种格式中&#xff0c; symbol是一个已存在的符号名称&#xff0c; 已经用或EQU定义过。在第三种格式中&…

新方向!文心一言X具身智能,用LLM大模型驱动智能小车

具身智能已成为近年来研究的热点领域之一。具身智能强调将智能体与实体环境相结合&#xff0c;通过智能体与环境的交互&#xff0c;来感知和理解世界&#xff0c;最终实现在真实环境中的自主决策和运动控制。 如何基于文心大模型&#xff0c;低成本入门“具身智能”&#xff0…

GEE:将鼠标变成十字指针,点击获取影像值,显示值到UI中

作者:CSDN @ _养乐多_ 本文记录了在 Google Earth Engine(GEE)开发中,将鼠标变成十字指针,点击获取影像值,显示值到UI中的代码片段。这段代码复制过去修改变量名就可以用了。 效果如下图所示, 文章目录 一、代码片段一、代码片段 使用的时候将 YLDImage 变量换成你屏…