草庐IT

2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解

Svan. 2023-12-16 原文

首先说明:以下题解为本人当时参赛时的解答,请自行检查运行结果的正误
废话不多说,直接上题

试题A:九进制转十进制

这题没说的,直接简单的“鸭皮”

十进制:2022=2×103+0×102+2×101+2同样得到:
九进制:2×93+0×92+2×91+2×90=(结果)

试题B:顺子日期

这题出的有点问题,题目中说的123算顺子,但是0到底包不包括在内,题目也没有给出解答,所以,这题如果算0就是14,不算0就是4,最后好像都给算对了。还是有争议的一道题。当时我也没有考虑0,就直接写了个4
答案:4||14

试题C:刷题统计


这题也没什么好说的,只要给定足够的空间就能拿满分,如果没有考虑到也没关系,部分数据还是能通过,可以拿到一点分数的(比如我……)请自觉将下述代码中的int换成long long

#include <stdio.h>
int main()
{
	int a=0,b=0,n=0,day=0,sum=0;
	scanf("%d%d%d",&a,&b,&n);
	
	while(n){
		day++;
		if(day%6==0||day%7==0){
			sum+=b;
		}
		else{
			sum+=a;
		}
		if(sum>=n){
			break;
		}	
	}
	printf("%d",day);
	return 0;
}

试题D:修剪灌木

这个题虽然说从左到右修建,但是她修建完一圈,从右向左时一样的道理,而树木白天到晚上还会长高,所以用加减法来实现上述问题。晚上做减法,白天长高做加法。再分别讨论是奇数和偶数两种情况,将每次循环的最大值记录下来就可以了。

#include <stdio.h>
#define N 10000
int main()
{
	int x=0,a[N]={0,0,0,0,0,0,0,0,0,0},i,j,k,h,sum=0;
	scanf("%d",&x);
	int b[N]={}; 
	
	for(h=1;h<10;h++){    //外层循环10次 
	
	if(h%2==0){  //超出范围 
			for(j=x-1;j>=0;j--){
				for(i=0;i<x;i++)
		a[i]++;           //实现白天加法 
	    
	    for(k=0;k<x;k++)
	    	if(a[k]>b[k])
	    		b[k]=a[k];
	    		
	    a[j]=0;      //夜晚减法
		
	}				 
	}

//******************************************************************	
	else if(h%2!=0){
		for(j=0;j<x;j++){
		    for(i=0;i<x;i++)
		        a[i]++;           //实现白天加法 
		
		for(k=0;k<x;k++)
	    	if(a[k]>b[k])
	    	   b[k]=a[k];
	    	   
	    a[j]=0;      //夜晚减法 	 
	}
	
	}
}

	for(i=0;i<x;i++)
		printf("%d\n",b[i]-1);      //输出最大值 

	return 0;
	 
}

试题E:X进制减法


最经典的海伦-秦九韶算法,具体的算法和思想注释在了代码里,能看懂的同学最好了,看不懂没关系,这个题目稍微有点难度。

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
 
typedef long long LL;
 
LL mod=1000000007;
int n,a,b;
int an[100010],bn[100010];
 
int main()
{
	cin>>n;
	cin>>a;
	for(int i=a;i>=1;i--) cin>>an[i];//这里我们需要的是低位对齐进行减法,高位不用管 
	cin>>b;
	for(int i=b;i>=1;i--) cin>>bn[i];//依然是从低位在0处 
	
	LL ans=0;
	for(int i=a;i>=1;i--)//这里不需要取a与b的最高位啊,因为a是严格大于b的,如果位数a<b就违背了这个原则 
	{                    //所以a的长度只能大于等于b 
		ans=(ans*max({2,an[i]+1,bn[i]+1})+an[i]-bn[i])%mod//秦九韶算法,这里算的是差值,所以要加上an[i]-bn[i] 
	}//ans({})这样可以计算多个数的最大值,我们最低为2,最高为最大值加一 
	cout<<ans<<endl;//直接输出即可; 
	
}

试题F:统计子矩阵


这个题我在考试时候也是最后做出来的,只要思路能清晰,这道题运用普通的暴力求解是可以做出来的。

#include <stdio.h>
int main()
{
	int n,m,i,k,j,r,h,c,b,sum=0,ans=0;
	scanf("%d%d%d",&n,&m,&k);
	
	int a[n][m];
	
	for(i=0;i<n;i++){
		for(j=0;j<m;j++){
			scanf("%d",&a[i][j]);   //输入 
		}
	}
	
	for(i=1;i<=n;i++){   //行       
		for(j=1;j<=m;j++){   //纵    //定义行和列 
		
			for(r=0;r<n;r++){ 
				for(h=0;h<m;h++){   //遍历 
					
					if(r+i<=n&&j+h<=m){
						sum=0;
						for(c=r;c<r+i;c++){
							for(b=h;b<h+j;b++){
								sum+=a[c][b];     //求和 
					
							}
						}
						if(sum<=k) ans++;
					}
					
				}
			}
		}
	}
	
	printf("%d",ans);
	return 0; 
}

试题G:积木画

此题目是洛谷的类似题目(覆盖墙面),不是很简单。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n;
int mod=1000000007;
int f[1000010][2];
int main(){
    scanf("%d",&n);
    f[0][0]=1;f[1][0]=1;
    for(int i=2;i<=n;i++){
        f[i][0]=(f[i-1][1]+f[i-1][0]+f[i-2][0])%mod;
        f[i][1]=(f[i-1][1]+2*f[i-2][0])%mod;
    }
    cout<<f[n][0];
}


至此,如果上述题目你都做的差不多,省一是稳了
下面的题目就供大家自行学习了,本人在考试时候也做的很垃圾。


这题我没做出来!!!!



这题的数据应该只能跑起来一部分……

#include <iostream>

using namespace std;

long long cnt=0;

int mod=1000000007;

int  n,m,c=2;

void dfs(int x,int y,int c){
	if(x<0||y<0) return ;
	if(x==0&&y==1&&c==1){
		cnt++;
		cnt=cnt%mod;
		return;
	}
	if(x>0) dfs(x-1,y,c*2);
	if(y>0) dfs(x,y-1,c-1);
}

int main(){
	int m,n;
	cin>>n>>m;
	dfs(n,m,c);
	cout<<cnt<<endl;
}



#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
 
typedef long long LL;
const int M=200010,N=10;
LL arr[M][N];
int main()
{
	int n;
	cin>>n;
	
	LL sta[10],top=0,mx=0,cnt=0;
	for(int i=0;i<n;i++)
	{
		top=0;
		LL p;
		cin>>p;
		while(p>1) sta[top++]=p,p=sqrt(p/2+1);//把这个数分解存储 
		mx=max(mx,top);//我们要找到最高的那个位置 
		cnt+=top;//一次剪一下,最大修剪次数 
		for(int j=0,k=top-1;k>=0;j++,k--)
		    arr[i][j]=sta[k];//把数的分解结果逆序存储进去 
	}
	for(int i=0;i<mx;i++)
	{
		for(int j=1;j<n;j++)
		{
			if(arr[j][i]==arr[j-1][i]&&arr[j-1][i])//只要他和前面相同,代表可以一起修剪,最大修建次数减减 
			cnt--;
		}
	}
	cout<<cnt<<endl;//直接输出结果即可 
 } 

省赛考完我直接睡了一下午,冷的一批。希望正在准备2023年蓝桥杯的你一定要加油努力,是金子总会发光的!!!!!

有关2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解的更多相关文章

  1. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  2. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  3. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  4. 7个大一C语言必学的程序 / C语言经典代码大全 - 2

    嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来

  5. ruby - 如何保持我不常用的编程语言技能 - 2

    关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭11年前。Improvethisquestion我不经常使用ruby​​-通常它加起来相当于每两个月或更长时间编写一次脚本。我的大部分编程都是使用C++进行的,这与ruby​​有很大不同。由于我与ruby​​之间的差距如此之大,我总是忘记语言的基本方面(比如解析文本文件和其他简单的东西)。我想每天练习一些基本的东西,我想知道是否有一些我可以订阅的网站,并且会向我发送当天的Ruby问题或类似的东西。有人知道这样的站点/Internet服务吗?

  6. ruby-on-rails - 如果特定语言环境中缺少翻译,如何配置 i18n 以使用 en 语言环境? - 2

    如果特定语言环境中缺少翻译,如何配置i18n以使用en语言环境翻译?当前已插入翻译缺失消息。我正在使用RoR3.1。 最佳答案 找到相似的question这里是答案:#application.rb#railswillfallbacktoconfig.i18n.default_localetranslationconfig.i18n.fallbacks=true#railswillfallbacktoen,nomatterwhatissetasconfig.i18n.default_localeconfig.i18n.fallback

  7. ruby-on-rails - 如何通过 URL 更改语言环境? - 2

    在我的双语Rails4应用程序中,我有一个像这样的LocalesController:classLocalesController用户可以通过此表单更改其语言环境:deflocale_switcherform_tagurl_for(:controller=>'locales',:action=>'change_locale'),:method=>'get',:id=>'locale_switcher'doselect_tag'set_locale',options_for_select(LANGUAGES,I18n.locale.to_s)end这有效。但是,目前用户无法通过URL更改

  8. ruby - 一种语言如何被自身解释(如 Rubinius)? - 2

    我使用Ruby编程已经有一段时间了,现在只使用Ruby的标准MRI实现,但我一直对我经常听到的其他实现感到好奇。前几天我在读有关Rubinius的文章,这是一个用Ruby编写的Ruby解释器。我试着在不同的地方查找它,但我很难弄清楚这样的东西到底是如何工作的。我在编译器或语言编写方面从来没有太多经验,但我真的很想弄明白。一门语言究竟如何才能被自己解释?编译中是否有一个我不明白这有意义的基本步骤?有人可以像我是个白痴一样向我解释这个吗(因为无论如何这都不会太离谱) 最佳答案 它比你想象的要简单。Rubinius并非100%用Ruby编

  9. ruby-on-rails - ruby 真的是一种完全面向对象的语言吗? - 2

    Ruby是完全面向对象的语言。在ruby​​中,一切都是对象,因此属于某个类。例如5属于Objectclass1.9.3p194:001>5.class=>Fixnum1.9.3p194:002>5.class.superclass=>Integer1.9.3p194:003>5.class.superclass.superclass=>Numeric1.9.3p194:005>5.class.superclass.superclass.superclass=>Object1.9.3p194:006>5.class.superclass.superclass.superclass.su

  10. 映宇宙2022年营收63亿元:同比下降三成,毛利率提升4.3个百分点 - 2

    3月26日,映宇宙(HK:03700,即“映客”)发布截至2022年12月31日的2022年度业绩财务报告。财报显示,映宇宙2022年的总营收为63.19亿元,较2021年同期的91.76亿元下降31.1%。2022年,映宇宙的经营亏损为4698.7万元,2021年同期则为净利润4.57亿元;期内亏损(净亏损)为1.68亿元,2021年同期的净利润为4.33亿元;非国际财务报告准则经调整净利润为3.88亿元,2021年同期为4.82亿元,同比下降19.6%。 映宇宙在财报中表示,收入减少主要是由于行业竞争加剧,该集团对旗下产品采取更为谨慎的运营策略以应对市场变化。不过,映宇宙的毛利率则有所提升

随机推荐