蓝桥杯刷题冲刺 | 倒计时28天

作者:指针不指南吗
专栏:蓝桥杯倒计时冲刺

🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾

文章目录

  • 1.卡片
  • 2.数字三角形
  • 3.购物单
  • 4.回文日期

1.卡片

  • 题目

    链接: 卡片 - 蓝桥云课 (lanqiao.cn)

小蓝有很多数字卡片,每张卡片上都是数字 00 到 99。

小蓝准备用这些卡片来拼一些数,他想从 11 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。

小蓝想知道自己能从 11 拼到多少。

例如,当小蓝有 3030 张卡片,其中 00 到 99 各 33 张,则小蓝可以拼出 11 到 1010,

但是拼 1111 时卡片 11 已经只有一张了,不够拼出 1111。

现在小蓝手里有 00 到 99 的卡片各 20212021 张,共 2021020210 张,请问小蓝可以从 11 拼到多少?

提示:建议使用计算机编程解决问题。


  • 我的题解

    #include<bits/stdc++.h>
    using namespace std;
    
    int num[10];
    
    int main()
    {
    	int i=0;
    	
    	while(1)
    	{
    		int a=++i;
    		while(a>0)   //取一个数的每一位的做法
    		{
    			num[a%10]++;
    			a/=10;
    		}
    		
    		for(int j=0;j<10;j++)
    		{
    			if(num[j]>2021)
    			{
    				cout<<i-1;  //重点,i的值是取不到的,所以-1!!!!!
    				return 0;
    			}
    		}
    	}
    	
    	
    	return 0;
    }
    

  • 反思

    第一次提交错误是 3182,即当3182时卡片不够用,所以不应该包括 3182

    正确答案 应该是 3181

    可以拿分的题,没了

    考虑边界条件,是否可以取到,是否需要多取一个


2.数字三角形

  • 题目

    链接:数字三角形 - 蓝桥云课 (lanqiao.cn)

图片描述

上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。

路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。

输入描述

输入的第一行包含一个整数N (1≤N≤100),表示三角形的行数。

下面的 N 行给出数字三角形。数字三角形上的数都是 0 至 100 之间的整数。

输出描述

输出一个整数,表示答案。

示例

输入

5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

输出

27

  • 我的题解

    • 第一次
    #include<bits/stdc++.h>
    using namespace std;
    
    const int N=100;
    
    int d[N][N];
    
    int main()
    {
    	int n;
    	cin>>n;
    	
    	for(int i=0;i<n;i++)
    		for(int j=0;j<=i;j++)
    			cin>>d[i][j];
    			
    	for(int i=n-2;i>=0;i--)
    		for(int j=0;j<=i;j++)
    			d[i][j]+=max(d[i+1][j],d[i+1][j+1]);
    	
    	cout<<d[0][0];
    	
    	return 0;
    }
    

    我觉得我的做法没有问题,而且手算出来答案也是 30,但是样例是 27

    悟了,原因:向左下走的次数与向右下走的次数相差不能超过 1,没有注意这句话

    找到左边界,找到右边界,即连续向左走两步,就只能拐弯

    在这里插入图片描述

    #include<bits/stdc++.h>
    using namespace std;
    
    const int N=100;
    
    int d[N][N];
    
    int main()
    {
    	int n;
    	cin>>n;
    	
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=i;j++)
    			cin>>d[i][j];
    			
    	for(int i=2;i<=n;i++)   //从上往下开始找,路径的权值最大的
    		for(int j=1;j<=i;j++)
    			d[i][j]+=max(d[i-1][j],d[i-1][j-1]);
    	
    	cout<<max(d[n][(n+1)/2],d[n][(n+2)/2]);  //最后只能走中间! get这个点
    	
    	return 0;
    }
    
  • 反思

最后一排只能走到 最中间的部分,但是注意 分成 奇数和偶数两种情况

巧妙的方法:

取最中间两个数的,表示方法记住:[(n+1)/2] [(n+2)/2]

认真审题!!注意到每一句话,太重要了


3.购物单

  • 题目

    链接: 购物单 - 蓝桥云课 (lanqiao.cn)

    小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。

    这不,大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。

    小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。

    现在小明很心烦,请你帮他计算一下,需要从取款机上取多少现金,才能搞定这次购物。

    取款机只能提供 100 元面额的纸币。小明想尽可能少取些现金,够用就行了。 你的任务是计算出,小明最少需要取多少现金。

    以下是让人头疼的购物单,为了保护隐私,物品名称被隐藏了。

    ****     180.90       88折
    ****      10.25       65折
    ****      56.14        9折
    ****     104.65        9折
    ****     100.30       88折
    ****     297.15        半价
    ****      26.75       65折
    ****     130.62        半价
    ****     240.28       58折
    ****     270.62        8折
    ****     115.87       88折
    ****     247.34       95折
    ****      73.21        9折
    ****     101.00        半价
    ****      79.54        半价
    ****     278.44        7折
    ****     199.26        半价
    ****      12.97        9折
    ****     166.30       78折
    ****     125.50       58折
    ****      84.98        9折
    ****     113.35       68折
    ****     166.57        半价
    ****      42.56        9折
    ****      81.90       95折
    ****     131.78        8折
    ****     255.89       78折
    ****     109.17        9折
    ****     146.69       68折
    ****     139.33       65折
    ****     141.16       78折
    ****     154.74        8折
    ****      59.42        8折
    ****      85.44       68折
    ****     293.70       88折
    ****     261.79       65折
    ****      11.30       88折
    ****     268.27       58折
    ****     128.29       88折
    ****     251.03        8折
    ****     208.39       75折
    ****     128.88       75折
    ****      62.06        9折
    ****     225.87       75折
    ****      12.89       75折
    ****      34.28       75折
    ****      62.16       58折
    ****     129.12        半价
    ****     218.37        半价
    ****     289.69        8折
    

    需要说明的是,88 折指的是按标价的 88 计算,而 8 折是按 80 计算,余者类推。 特别地,半价是按 50计算。

    请输出小明要从取款机上提取的金额,单位是元。

  • 第一次

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
    	int sum=0;
    	
    	int n=50;
    	
    	int a,b;
    	
    	while(n--)
    	{
    		cin>>a>>b;  //这里,输入很是个问题
    		sum+=a*b;
    	}
    	
    	cout<<sum;
    	
    	return 0;
    }
    

    为了这个输入,我去 word 上去处理 数据,方便它的输入

    一系列的查找替换 处理好 之后 程序 还是不能正确输入

    调式发现 a一直是180

    在这里插入图片描述

    数据类型错了 应该是 double , 我一直写的 int , 最后才发现

    • 第二次——成功
    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
    	double sum=0;
    	
    	int n=50;
    	
    	double a,b;  //数据类型 错了
    	
    	while(n--)
    	{
    		cin>>a>>b;
    		sum+=a*b;
    	}
    	
    	cout<<sum;
    	
    	return 0;
    }
    
    • 通过看题解,还学会了一种方法,这个更加简便
      在这里插入图片描述
  • 反思

    1. 一定要确保数据类型使用正确
    2. 巧用 word 和 excel ,来解答
    3. 看了 python 的题解,tql ,打算简单学习一下 基本语法,填空够用就行

4.回文日期

  • 题目

    链接:回文日期 - 蓝桥云课 (lanqiao.cn)

    2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。

    有人表示 20200202 是 “千年一遇” 的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021 年 12 月 2 日。

    也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即 2121 年 12 月 12 日。算不上 “千年一遇”,顶多算 “千年两遇”。

    给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。

    输入描述

    输入包含一个八位整数 N*,表示日期。

    对于所有评测用例,10000101≤N≤89991231,保证 N 是一个合法日期的 8 位数表示。

    输出描述

    输出两行,每行 1 个八位数。第一行表示下一个回文日期,第二行表示下一个 ABABBABA 型的回文日期。

    示例

    输入

    20200202
    

    输出

    20211202
    21211212
    
    • 第一次

      #include<bits/stdc++.h>
      using namespace std;
      
      int main()
      {
      	int k;
      	cin>>k;
      	
      	int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
      	
      	int flagh=1,h=0,w=0;
      	
      	int resh,resw;
      	
      	while(!h||!w)
      	{
      		k++;
      		
      		//更新日期 
      		int d=k%100;
      		int m=k%10000/100;
      		int y=k/10000;
      		
      		if(y%4==0&&y%100!=0||y%400==0) a[2]=29;
      		else a[2]=28;
      		
      		if(d>a[m])
      		{
      			d=1,m++;
      		}
      		if(m>12)
      		{
      			m=1,y++;
      		}
      		
      		k=d+m*100+y*10000;
      		
      		//判断满足条件 
      		int t=k;
      		int b[8]={0}; //把每一位放到数组中去
      		 
      		int i=0;
      		while(t>0)
      		{
      			b[i++]=t%10;
      			t/=10;	
      		}
      		
      		//判断回文日期 
      		if(!h)  //表示还没找到 
      		{
      			for(int i=0;i<8;i++)
      			{
      				if(b[i]!=b[8-i-1]) 
      				{
      					flagh=0;  //不是回文,标记1 
      					break;
      				}
      			}
      			if(flagh) 
      			{
      				resh=k;
      				h=1;
      			}
      		}
      		
      		//判断完美日期 
      		if(!w)
      		{
      			int i;
      			if(b[0]==b[2]==b[5]==b[7]&&b[1]==b[3]==b[4]==b[6])
      			{
      				w=1;
      				resw=k;
      			}
      		 } 
      		 
      	 } 
      	 
      	 cout<<resh<<endl<<resw;
      	
      	return 0;
        }
      

      以运行超时告终

    • 第二次

      #include<bits/stdc++.h>
      using namespace std;
      
      bool isleap(int a)
      {
      	return a%4==0&&a%100!=0||a%400==0; 
      }
      
      bool check(int year,int month,int day)
      {
      	if(month==0||month>12) return false;
      	
      	int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
      	
      	if(isleap(year)) a[2]=29;
      	else a[2]=28;
      	
      	if(day>a[month]||day==0) return false;
      	else return true;
      }
      
      int main()
      {
      	int k;
      	cin>>k;
      	
      	int flag=1;
      	
      	for(int i=k+1;i<89991231;i++)
      	{
      			
      		int d=i%100;
      		int m=i%10000/100;
      		int y=i/10000;
      	
      		//判断满足条件 
      		int t=k;
      		int b[8]={0}; //把每一位放到数组中去
      		 
      		int j=0;
      		while(t>0)
      		{
      			b[j++]=t%10;
      			t/=10;	
      		}
      		
      		if(b[0]==b[7]&&b[1]==b[6]&&b[2]==b[5]&&b[3]==b[4]&&flag)
      		{
      			if(check(y,m,d))
      			{
      				cout<<i<<endl;
      				flag=0;
      			}
      			
      		}
      		if(b[0]==b[2]&&b[2]==b[5]&&b[5]==b[7]&&b[1]==b[3]&&b[3]==b[4]&&b[4]==b[6])
      			{
      				cout<<i<<endl;
      				return 0;
      			}	
      	}
      	
      	return 0;
        }
      

      再次以失败告终,但是我就是模拟的正确题解,不知哪里不行

    • 正确题解

      #include <iostream>
      using namespace std;
      
      bool isLeap(int y){
          return (y%4==0&&y%100!=0)||(y%400==0);
      }
      
      bool check(int year,int month,int day){//判断是否为合法日期
          if(month>12||month==0) return false;
          if(day>31) return false;
          if(month==2){
              if(isLeap(year)&&day>29)
                  return false;
              if(!isLeap(year)&&day>28)
                  return false;
          }
          if(month==4||month==6||month==9||month==11){
              if(day>30) return false;
          }
          return true;
      }
      int main()
      {
          int n,i;
          cin>>n;
          int a,b,c,d,e,f,g,h;//8位数字
          int year,month,day;
          bool flag=false;
          for(i=n+1;i<=99999999;i++){
              year=i/10000;
              month=(i%10000)/100;
              day=i%100;
              a=i%10;
              b=(i/10)%10;
              c=(i/100)%10;
              d=(i/1000)%10;
              e=(i/10000)%10;
              f=(i/100000)%10;
              g=(i/1000000)%10;
              h=(i/10000000)%10;
              if(a==h&&b==g&&c==f&&d==e&&flag==false){
                  if(check(year,month,day)){
                      cout<<i<<endl;
                      flag=true;//只输出一个回文
                  }
              }
              if(a==h&&b==g&&c==f&&d==e&&a==c&&b==d){
                  if(check(year,month,day)){
                      cout<<i<<endl;
                      break;
                  }
              }
      
          }
          return 0;
      }
      

Alt

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【计算机组成原理 - 第一章】计算机系统概论(完结)

本章参考王道考研相关课程&#xff1a; 【2021版】1.2.1_计算机硬件的基本组成_哔哩哔哩_bilibili 【2021版】1.2.2_认识各个硬件部件_哔哩哔哩_bilibili 【2021版】1.2.3_计算机系统的层次结构_哔哩哔哩_bilibili 【2021版】1.3_计算机的性能指标_哔哩哔哩_bilibili 目录 一、…

彻底搞懂nodejs事件循环

nodejs是单线程执行的&#xff0c;同时它又是基于事件驱动的非阻塞IO编程模型。这就使得我们不用等待异步操作结果返回&#xff0c;就可以继续往下执行代码。当异步事件触发之后&#xff0c;就会通知主线程&#xff0c;主线程执行相应事件的回调。 以上是众所周知的内容。今天…

14个Python处理Excel的常用操作,非常好用

自从学了Python后就逼迫用Python来处理Excel&#xff0c;所有操作用Python实现。目的是巩固Python&#xff0c;与增强数据处理能力。 这也是我写这篇文章的初衷。废话不说了&#xff0c;直接进入正题。 数据是网上找到的销售数据&#xff0c;长这样&#xff1a; 一、关联公式:…

人工智能轨道交通行业周刊-第35期(2023.2.20-2.26)

本期关键词&#xff1a;重庆智慧轨道、智能运维主机、标准轨距、地方铁路公报、景深、机器视觉应用 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通Rai…

【C/C++】必知必会知识点大总结

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;C/C知识点 &#x1f4e3;专栏定位&#xff1a;整理一下 C 相关的知识点&#xff0c;供大家学习参考~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;…

基于Reactor模式下的epoll多路复用服务器

文章目录一、认识Reactor模式1.1 Reactor 模式的概念1.2 Reactor 模式的组件1.3 Reactor 模式的流程1.4 Reactor 模式的优点二、Reactor模式下的 epoll ET服务器2.1 总体设计思路2.2 Connection 类结构2.3 封装 socket 实现 Sock 类2.4 封装 epoll 实现 Epoller 类2.4.1 Create…

2023年BeijngCrypt勒索病毒家族最新变种之.halo勒索病毒

目录 前言&#xff1a;简介 一、什么是.halo勒索病毒&#xff1f; 二、.halo勒索病毒是如何传播感染的&#xff1f; 三、感染.halo后缀勒索病毒建议立即做以下几件事情 四、中了.halo后缀的勒索病毒文件怎么恢复&#xff1f; 五、加密数据恢复情况 六、系统安全防护措施建…

宣布推出 .NET 社区工具包 8.1!

我们很高兴地宣布 .NET Community Toolkit 8.1 版正式发布&#xff01;这个新版本包括呼声很高的新功能、bug 修复和对 MVVM 工具包源代码生成器的大量性能改进&#xff0c;使开发人员在使用它们时的用户体验比以往更好&#xff01; 就像在我们之前的版本中一样&#xff0c;我…

STM32F1硬件SPI驱动nRF24L01通过按键控制数据收发带状态反馈

STM32F1硬件SPI驱动nRF24L01通过按键控制数据收发带状态反馈&#x1f4cc;相关篇《STM32F1基于STM32CubeMX配置硬件SPI驱动nRF24L01数据收发》 &#x1f3ac;功能演示 &#x1f33f;工程默认配置的是STM32F103VC单片机&#xff0c;其他型号的修改需要修改启动文件startup_st…

python+django+vue图书个性化推荐系统

整个系统是由多个功能模块组合而成的&#xff0c;要将所有的功能模块都一一列举出来&#xff0c;然后进行逐个的功能设计&#xff0c;使得每一个模块都有相对应的功能设计&#xff0c;然后进行系统整体的设计。 本图书个性化推荐系统结构图如图python manage.py runserver 开…

宇宙最强-GPT-4 横空出世:最先进、更安全、更有用

文章目录前言一、准确性提升1.创造力2.视觉输入3.更长的上下文二、相比于ChatGPT有哪些提升1.GPT-4 的高级推理能力超越了 ChatGPT2.GPT-4 在多种测试考试中均优于 ChatGPT。三、研究团队在GPT-4模型都做了哪些改善1.遵循 GPT、GPT-2 和 GPT-3 的研究路径2.我们花了 6 个月的时…

分享10个不错的C语言开源项目

今天跟大家分享10个重量级的C语言开源项目&#xff0c;C语言确实经得住考验&#xff1a; Redis&#xff1a;Redis是一个开源的高性能的键值对数据库。它以C语言编写&#xff0c;具有极高的性能和可靠性。 Nginx&#xff1a;Nginx是一个高性能的HTTP和反向代理服务器&#xff0…

刚工作3天就被裁了....

前言 还有谁&#xff1f;刚上三天班就被公司公司的工作不适合我&#xff0c;叫我先提升一下。 后面我也向公司那边讨要了一个说法&#xff0c;我只能说他们那边的说辞让我有些不服气。 现在之所以把这件事上记录一下&#xff0c;一是记录一下自己的成长轨迹&#xff0c;二是…

改进YOLO系列 | CVPR2023最新Backbone | FasterNet 远超 ShuffleNet、MobileNet、MobileViT 等模型

论文地址:https://export.arxiv.org/pdf/2303.03667v1.pdf 为了设计快速神经网络,许多工作都集中在减少浮点运算(FLOPs)的数量上。然而,作者观察到FLOPs的这种减少不一定会带来延迟的类似程度的减少。这主要源于每秒低浮点运算(FLOPS)效率低下。并且,如此低的FLOPS主要…

javaSE系列之类与对象

javaSE系列之类与方法什么是类类的定义书写事项什么是实例化this引用this的注意事项对象的初始化构造方法封装的概念访问限定符封装扩展之包static成员static的特性static的初始化代码块注意事项内部类1.实例内部类&#x1f497; &#x1f497; 博客:小怡同学&#x1f497; &am…

【LeetCode】1171. 从链表中删去总和值为零的连续节点、面试题 02.05. 链表求和

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 1171. 从链表中删去总和值为零的连续节点 面试题 02.05. 链表求和 1171. 从链表中删去总和…

【面试题】面试官:如果后端给你 1w 条数据,你如何做展示?

最近一位朋友参加阿b的面试&#xff0c;然后面试官问了她这个问题&#xff0c;我问她咋写的&#xff0c;她一脸淡定的说&#xff1a;“虚拟列表。”大厂面试题分享 面试题库前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面…

tp6实现邮件发送

tp6实现邮件发送 phpMailer 是一个非常强大的 ph p发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、html网页,上传附件,并且使用起来非常方便。 phpMailer 的特点&#xff1a; 1、在邮件中包含多个 TO、CC、BCC 和 REPLY-TO。2、平台应用广泛&#xff0c;支持的 SMTP…

阿里p8测试总监,让我们用这份《测试用例规范》,再也没加班过

经常看到无论是刚入职场的新人&#xff0c;还是工作了一段时间的老人&#xff0c;都会对编写测试用例感到困扰&#xff1f;例如&#xff1a; 固然&#xff0c;编写一份好的测试用例需要&#xff1a;充分的需求分析能力 理论及经验加持&#xff0c;作为测试职场摸爬打滚的老人&…

ElasticSearch 8 学习笔记总结(六)

文章目录一. ES8 的Java API 环境准备二. ES8 的Java API 索引操作三. ES8 的Java API 文档操作1. 文档的 插入 批量插入 删除等操作2. 文档的查询四、异步客户端操作一. ES8 的Java API 环境准备 ES8 废除了Type的概念。为了适应这种数据结构的改变&#xff0c;ES官方从1.7版…