
本篇博客旨在记录自已打卡蓝桥杯3月份刷题集训,同时会有自己的思路及代码解答希望可以给小伙伴一些帮助。本人也是算法小白,水平有限,如果文章中有什么错误之处,希望小伙伴们可以在评论区指出来,共勉💪。
文章目录
题目:在一个 n 行 m 列的方格图上有一些位置有地雷,另外一些位置为空。
请为每个空位置标一个整数,表示周围八个相邻的方格中有多少个地雷。
输入格式:
输入的第一行包含两个整数 n,m。
第 2 行到第 n+1 行每行包含 m 个整数,相邻整数之间用一个空格分隔。如果对应的整数为 0,表示这一格没有地雷。如果对应的整数为 1,表示这一格有地雷。
其中,1≤n,m≤100 分钟后还是在当天。
输出格式:
输出 n 行,每行 m 个整数,相邻整数之间用空格分隔。
对于没有地雷的方格,输出这格周围的地雷数量。对于有地雷的方格,输出 9。
输入输出样例:
输入
3 4
0 1 0 0
1 0 1 0
0 0 1 0
输出
2 9 2 1
9 4 9 2
1 3 9 2
运行限制:
解题代码:
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
/**
* 2021 模拟赛 模拟 暴力
* 扫雷
* @author QIA
* @create 2023-03-24-9:43
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int map[][] = new int[n+2][m+2];
int result[][] = new int[n+2][m+2];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
map[i][j] = sc.nextInt();
}
}
int sum = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if(map[i][j] == 1) {
result[i][j] = 9; // 存在地雷赋给9
}else {
sum = map[i][j] + map[i-1][j-1] + map[i-1][j] + map[i-1][j+1] +
map[i][j-1] + map[i][j+1] + map[i+1][j-1] + map[i+1][j] + map[i+1][j+1];
result[i][j] = sum;
}
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
System.out.print(result[i][j] + " ");
}
System.out.println();
}
}
}
题目:
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝特别喜欢 22,今年是公元 20202020 年,他特别高兴,因为每天日历上都可以看到 22。
如果日历中只显示年月日,请问从公元 19001900 年 11 月 11 日到公元 99999999 年 1212 月 3131 日,一共有多少天日历上包含 22。即有多少天中年月日的数位中包含数字 22。
运行限制:
解题代码:
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
//判断输入的数是否含2
static boolean check(int a) {
while (a > 0) {
if (a % 10 == 2)
return true;
a /= 10;
}
return false;
}
public static void main(String[] args) {
int[] day = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int ans = 0;
for (int i = 1900; i <= 9999; i++) {
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {//闰年
day[1] = 29;
} else {
day[1] = 28;
}
// if(check(i)) //如果在这里判断,每一年只会判断一次,少判断了,要把年月日合起来,有了就算
// ans++;
for (int month = 1; month <= 12; month++) {
// if(check(month))
// ans++;
for (int d = 1; d <= day[month - 1]; d++) {
if (check(d) || check(i) || check(month))
ans++;
}
}
}
System.out.println(ans);
}
}
题目:下面的图形是著名的杨辉三角形:

如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列: 1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,⋯1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,⋯
给定一个正整数 N,请你输出数列中第一次出现 N 是在第几个数?
输入格式:
输入一个整数 N。
输出格式:
输出一个整数代表答案。
输入输出样例:
输入
6
输出
13
评测用例规模与约定:
对于 20 的评测用例,1≤N≤10; 对于所有评测用例,1≤N≤1000000000。
运行限制:
解题代码:
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
long num = scan.nextLong();
int loc=1;
boolean flag =true;
if(num==1){
System.out.println(1);
flag=false;
}
for(int i=16;i>1;i--){//从内侧第16根开始找,i表示层间索引,j表
if(flag){
int j =2*i;
while(comb(i, j)<=1e9){
if(comb(i, j)==num){
loc = j*(j+1)/2+i+1;
System.out.print(loc);
flag=false;
break;
}
j++;
}
}
}
if(flag){
System.out.print(num*(num+1)/2+2);
}
scan.close();
}
public static long comb(int a,int b){
long res =1;
int c =1;
for(int i=b;i>0&&i>=(b-a+1);i--,c++){
res*=i;
res/=c;
}
return res;
}
}
题目:在很久很久以前,有 n 个部落居住在平原上,依次编号为 1 到 n。第 i 个部落的人数为 ti。
有一年发生了灾荒。年轻的政治家小蓝想要说服所有部落一同应对灾荒,他能通过谈判来说服部落进行联合。
每次谈判,小蓝只能邀请两个部落参加,花费的金币数量为两个部落的人数之和,谈判的效果是两个部落联合成一个部落(人数为原来两个部落的人数之和)。
输入格式:
输入的第一行包含一个整数 n,表示部落的数量。
第二行包含 n 个正整数,依次表示每个部落的人数。
其中,1≤n≤1000,1≤*ti*≤104。
输出格式:
输出一个整数,表示最小花费。
输入输出样例:
输入
4
9 1 3 5
输出
31
运行限制:
解题代码:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int len = sc.nextInt();
int[] nums = new int[len];
for(int i=0;i<len;i++) {
nums[i] = sc.nextInt();
}
Arrays.sort(nums);
int sum = 0;
// 找到规律前两个数加(n-1)次,后面的数字加(n-其下标)次
for(int i=1;i<=len;i++) {
sum = sum+i*nums[len-i];
}
// 注意到nums[0]多加了一次
sum = sum-nums[0];
System.out.println(sum);
sc.close();
}
}
题目:小明开了一家糖果店。他别出心裁:把水果糖包成 4 颗一包和 7 颗一包的两种。糖果不能拆包卖。
小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。
你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是 17。大于 17 的任何数字都可以用 4 和 7 组合出来。
本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。
输入格式:
输入两个正整数,表示每种包装中糖的颗数(都不多于 1000 )。
输出格式:
输出一个正整数,表示最大不能买到的糖数。
不需要考虑无解的情况
输入输出样例:
输入
4 7
输出
17
运行限制:
解题代码:
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int a=scan.nextInt();
int b=scan.nextInt();
System.out.println(a*b-(a+b));
scan.close();
}
}
题目:小蓝办了一个画展,在一个画廊左右两边陈列了他自己的作品。为了使画展更有意思,小蓝没有等距陈列自己的作品,而是按照更有艺术感的方式陈列。
在画廊的左边陈列了 L 幅作品,在画廊的右边陈列了 R 幅作品,左边的作品距离画廊的起点依次为 u*1,u2,⋅⋅⋅,uL,右边的作品距离画廊起点依次为 v1,v2, ⋅⋅⋅ , vR。
每周,小蓝要整理一遍自己的每一幅作品。整理一幅作品的时间是固定的,但是要带着沉重的工具。从一幅作品到另一幅作品之间的距离为直线段的长度。
小蓝从画廊的起点的正中央(左右两边的中点)出发,整理好每一幅画,最终到达画廊的终点的正中央。已知画廊的宽为 w。
请问小蓝最少带着工具走多长的距离?
输入格式:
输入的第一行包含四个整数 L,R,d,w,表示画廊左边和右边的作品数量,以及画廊的长度和宽度。
第二行包含 L 个正整数 u*1,*u 2, ⋅⋅⋅ , uL,表示画廊左边的作品的位置。
第三行包含 R 个正整数 v*1,v2 , ⋅⋅⋅ , vR,表示画廊右边的作品的位置。
其中有,1 ≤ L , R ≤ 500 , 1 ≤ d ≤ 105,1 ≤ w ≤ 105, 0 ≤ u 1 < u2 < ⋅⋅⋅ < uL ≤ d , 0 ≤ v1 < v 2 < ⋅⋅⋅ < vR ≤ d 。
输出格式:
输出一个实数,四舍五入保留两位小数,表示小蓝最少带着工具走的距离。
输入输出样例:
输入
3 3 10 2
1 3 8
2 4 6
输出
14.71
运行限制:
解题代码:
import java.util.Scanner;
public class Main {
static final int INF = Integer.MAX_VALUE;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int l = sc.nextInt();
int r = sc.nextInt();
int d = sc.nextInt();
double w = sc.nextDouble();
double wr = w / 2;
int[] ls = new int[l + 1];
int[] rs = new int[r + 1];
for (int i = 1; i < l + 1; i++) {
ls[i] = sc.nextInt();
}
for (int i = 1; i < r + 1; i++) {
rs[i] = sc.nextInt();
}
double[][][] dp = new double[l + 1][r + 1][2];
for (int i = 0; i < l + 1; i++) {
for (int j = 0; j < r + 1; j++) {
dp[i][j][0] = INF;
dp[i][j][1] = INF;
}
}
double a = f(wr, ls[1]);
double b = f(wr, rs[1]);
dp[1][0][0] = a;
dp[0][1][1] = b;
for (int i = 2; i < l + 1; i++) {
dp[i][0][0] = a + ls[i] - ls[1];
}
for (int i = 2; i < r + 1; i++) {
dp[0][i][1] = b + rs[i] - rs[1];
}
for (int i = 1; i < l + 1; i++) {
for (int j = 1; j < r + 1; j++) {
dp[i][j][0] = Math.min(dp[i - 1][j][0] + ls[i] - ls[i - 1], dp[i - 1][j][1] + f(w,ls[i] - rs[j]));
dp[i][j][1] = Math.min(dp[i][j - 1][1] + rs[j] - rs[j - 1], dp[i][j - 1][0] + f(w,rs[j] - ls[i]));
}
}
double ltop=dp[l][r][0]+f(wr,d-ls[l]);
double rtop=dp[l][r][1]+f(wr,d-rs[r]);
System.out.printf("%.2f",Math.min(ltop, rtop));
}
private static double f(double a, double b) {
return Math.sqrt(a * a + b * b);
}
}
有帮助的话,希望可以点赞❤️+收藏⭐,谢谢各位大佬~~🙌🙌🙌
我需要formtastic来仅显示月份和年份字段,而不显示日期字段。日期选择器很好,但它显示了整个日历。我不想要日期选择器。f.input:accounting_month,:label=>"会计月份",:as=>:datepicker我只需要月份和年份。 最佳答案 有一种方法可以做到这一点:"Accountingmonth",:order=>[:month,:year]这将自动隐藏“天”输入并为其指定默认值1。 关于ruby-on-rails-Rails3Formtastic。如何让f
我有一个任务列表(名称、starts_at),我试图在每日View中显示它们(就像iCal)。deftodays_tasks(day)Task.find(:all,:conditions=>["starts_atbetween?and?",day.beginning,day.ending]end我不知道如何将Time.now(例如“2009-04-1210:00:00”)动态转换为一天的开始(和结束),以便进行比较。 最佳答案 deftodays_tasks(now=Time.now)Task.find(:all,:conditio
目录前言: 一、ASC分析代码实现二、 卡片分析代码实现三、 直线分析代码实现四、货物摆放分析代码实现小结:前言: 在刷题的过程中,发现蓝桥杯的题目和力扣的差别很大。让人有一种不一样的感觉,蓝桥杯题目偏向对于实际问题用编程去的解决,而力扣给人感觉很锻炼自己的编程思维,逻辑能力。两者结合去刷,相信会有不一样的收获。 一、ASC 已知大写字母A的ASCII码为65,请问大写字母L的ASCII码是多少?分析 这道题目看上去很简单,我们需确定自己计算的准确,所以我建议用编程去解决。代码实现publicclassTest8{publicstaticvoidmain(String[]args){Sy
什么是0day漏洞?0day漏洞,是指已经被发现,但是还未被公开,同时官方还没有相关补丁的漏洞;通俗的讲,就是除了黑客,没人知道他的存在,其往往具有很大的突发性、破坏性、致命性。0day漏洞之所以称为0day,正是因为其补丁永远晚于攻击。所以攻击者利用0day漏洞攻击的成功率极高,往往可以达到目的并全身而退,而防守方却一无所知,只有在漏洞公布之后,才后知后觉,却为时已晚。“后知后觉、反应迟钝”就是当前安全防护面对0day攻击的真实写照!为了方便大家理解,中科三方为大家梳理当前安全防护模式下,一个漏洞从发现到解决的三个时间节点:T0:此时漏洞即0day漏洞,是已经被发现,还未被公开,官方还没有相
ruby1.9.3dev(2011-09-23修订版33323)[i686-linux]轨道3.0.20最近为什么在与DateTimeonRails相关的RSpecs项目上工作我发现在给定日期以下语句发出的值date.end_of_day.to_datetime和date.to_datetime.end_of_day虽然它们表示相同的日期时间,但比较时返回false。为了确认这一点,我打开了Rails控制台并尝试了以下操作1.9.3dev:053>monday=Time.now.monday=>2013-02-2500:00:00+05301.9.3dev:054>monday.cla
?作者主页:静Yu?简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者?社区地址:前端知识交流社区?博主的个人博客:静Yu的个人博客?博主的个人笔记本:前端面试题个人笔记本只记录前端领域的面试题目,项目总结,面试技巧等等。接下来会更新蓝桥杯官方系统基础练习的VIP试题,依然包括解题思路,源代码等等。问题描述:给定当前的时间,请用英文的读法将它读出来。时间用时h和分m表示,在英文的读法中,读一个时间的方法是: 如果m为0,则将时读出来,然后加上“o’clock”,如3:00读作“threeo’clock”。 如果m不为0,则将时读出来,然后将分读出来,如5
我正在使用Rails3.1。这是我的代码,要求用户输入信用卡到期月份和年份。以上代码有效。但是,问题是如果出现验证错误,则会重置所选的到期时间和月份。我试过f.select_month但不支持。 最佳答案 尝试这样的事情:true,:start_year=>Date.today.year,:end_year=>(Date.today.year+10),:use_month_numbers=>true%> 关于ruby-on-rails-如何显示信用卡的月份和年份选择,我们在StackOv
我找到了这个方法here.start=DateTime.nowsleep15stop=DateTime.now#minutesputs((stop-start)*24*60).to_ihours,minutes,seconds,frac=Date.day_fraction_to_time(stop-start)我有以下错误:`':privatemethod`day_fraction_to_time'calledforDate:Class(NoMethodError)我检查了/usr/lib/ruby/1.9.1/date.rb并找到了它:defday_fraction_to_time(
我遇到了错误“2013-03-06”的未定义方法`strftime':String当尝试使用strftime从字符串2013-03-06正常显示日期(2013年6月3日或类似日期)时。在我的index.html.erb中执行此操作的行看起来像这样我只是在学习Rails,所以我确信这只是一个愚蠢的初学者错误,我们将不胜感激。谢谢 最佳答案 当strftime是时间/日期类的方法时,您的截止日期看起来是一个字符串。你可以试试这个:Date.parse(task.duedate).strftime("%B%e,%Y")
十四届蓝桥青少组模拟赛Python-20221108T1.二进制位数十进制整数2在十进制中是1位数,在二进制中对应10,是2位数。十进制整数22在十进制中是2位数,在二进制中对应10110,是5位数。请问十进制整数2022在二进制中是几位数?print(len(bin(2022))-2)#运行结果:11T2.晨跑小蓝每周六、周日都晨跑,每月的1、11、21、31日也晨跑。其它时间不晨跑。已知2022年1月1日是周六,请问小蓝整个2022年晨跑多少天?#样例代码1ls=[0,31,28,31,30,31,30,31,31,30,31,30,31]ans=0k=6foriinrange(1,13)