第十一届蓝桥杯大赛第二次模拟(软件类)

T1:12.5MB

【问题描述】
  在计算机存储中,12.5MB是多少字节?
【答案提交】
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

12.5 MB = (12.5*1024 KB)*1024 B = 13107200 B (用计算器算的童鞋不要忘记去掉逗号)

T2:最多边数

【问题描述】
  一个包含有2019个结点的有向图,最多包含多少条边?(不允许有重边)
【答案提交】
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

用图论的结论:n(n-1)就可以了,但是当时我就没想到,代码写出来的

int main(){
    int n;
    cin >> n;
    int sum = 0;
    for(int i=1;i<=n;i++) {
    	sum+=(i-1)*2;
	}
	cout << sum;
    return 0;
}

答案:4074342

T3:单词重排

【问题描述】
  将LANQIAO中的字母重新排列,可以得到不同的单词,如LANQIAO、AAILNOQ等,注意这7个字母都要被用上,单词不一定有具体的英文意义。
  请问,总共能排列如多少个不同的单词。
【答案提交】
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

用排列组合做出来的:
n!/a! (其中n为总字母个数,a为重复字母个数)

当然,用全排列写代码也没问题:

#include<bits/stdc++.h>
using namespace std;
int main(){
	string s = "LANQIAO";
	sort(s.begin(),s.end()); //要先排个序 
	set<string> res;
	do{
		res.insert(s);	
	}while(next_permutation(s.begin(),s.end()));
	cout << res.size();
	return 0;
}

T4:括号序列

【问题描述】
由1对括号,可以组成一种合法括号序列:()。
由2对括号,可以组成两种合法括号序列:()()、(())。
由4对括号组成的合法括号序列一共有多少种?
【答案提交】
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

看的一篇大佬的思路,用以前都没听说过的卡特兰数:卡特兰数是形如:1,1, 2, 5, 14…这样的数。我们现在只需要知道,1对括号可以组成1种合法序列,2对有2种,3对有5种,4对其实就是14种。

算法中的数学—卡特兰数(解析+代码实现)
我参考大佬的写了一下代码,总结一下我的收获:

  1. 结果数组一定要开成全局变量,不然就会出现奇奇怪怪的结果(可能就输出地址了,但是数组也没有越界,就不知道为什么),还有就是空间一定要开对啦。
  2. 卡特兰数的公式很重要(写不出来就用公式推吧):
    在这里插入图片描述
#include<bits/stdc++.h>
using namespace std;
long long k[20];
int n;
int kate(){
	cin >> n;
	k[0] = k[1] = 1; //数组一定要开到外面 成全局变量 
	for(int i = 2; i <= n; i++)
    {
        k[i] += k[i - 1] * (4 * i - 2) / (i + 1);  //f(n)=f(n-1)*(4*n-2)/(n+1)
    }
	cout << k[n];
}
int main(){
	kate();
	return 0;
}

T5:反倍数

【问题描述】
  给定三个整数 a, b, c,如果一个整数既不是 a 的整数倍也不是 b 的整数倍还不是 c 的整数倍,则这个数称为反倍数。
  请问在 1 至 n 中有多少个反倍数。
【输入格式】
  输入的第一行包含一个整数 n。
  第二行包含三个整数 a, b, c,相邻两个数之间用一个空格分隔。
【输出格式】
  输出一行包含一个整数,表示答案。
【样例输入】
30
2 3 6
【样例输出】
10
【样例说明】
以下这些数满足要求:1, 5, 7, 11, 13, 17, 19, 23, 25, 29。
【评测用例规模与约定】
对于 40% 的评测用例,1 <= n <= 10000。
对于 80% 的评测用例,1 <= n <= 100000。
对于所有评测用例,1 <= n <= 1000000,1 <= a <= n,1 <= b <= n,1 <= c <= n。

暴力:

#include<bits/stdc++.h>
using namespace std;

int n, a, b, c;
int ans = 0;

int main() {
	cin >> n;
	cin >> a >> b >> c;
	for(int i = 1; i <= n; i++) {
		if(i % a != 0 && i % b != 0 && i % c != 0) {
			ans++;
		}
	}
	cout << ans;
	return 0;
}

T6:凯撒加密

【问题描述】
  给定一个单词,请使用凯撒密码将这个单词加密。凯撒密码是一种替换加密的技术,单词中的所有字母都在字母表上向后偏移3位后被替换成密文。即a变为d,b变为e,…,w变为z,x变为a,y变为b,z变为c。
  例如,lanqiao会变成odqtldr。
【输入格式】
  输入一行,包含一个单词,单词中只包含小写英文字母。
【输出格式】
  输出一行,表示加密后的密文。
【样例输入】
lanqiao
【样例输出】
odqtldr
【评测用例规模与约定】
对于所有评测用例,单词中的字母个数不超过100。

#include<bits/stdc++.h> 
typedef long long ll;
using namespace std;

int main(){
	string s;
	getline(cin,s);
	for(int i=0;i<s.length();i++){
		s[i] = (s[i]-'a'+3)%26+'a';
	}
	cout << s;
	return 0;
}

T7:螺旋

【问题描述】
  对于一个 n 行 m 列的表格,我们可以使用螺旋的方式给表格依次填上正整数,我们称填好的表格为一个螺旋矩阵。
  例如,一个 4 行 5 列的螺旋矩阵如下:
1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8
【输入格式】
  输入的第一行包含两个整数 n, m,分别表示螺旋矩阵的行数和列数。
  第二行包含两个整数 r, c,表示要求的行号和列号。
【输出格式】
  输出一个整数,表示螺旋矩阵中第 r 行第 c 列的元素的值。
【样例输入】
4 5
2 2
【样例输出】
15
【评测用例规模与约定】
对于 30% 的评测用例,2 <= n, m <= 20。
对于 70% 的评测用例,2 <= n, m <= 100。
对于所有评测用例,2 <= n, m <= 1000,1 <= r <= n,1 <= c <= m。

#include<bits/stdc++.h> 
typedef long long ll;
using namespace std;

int n,m,r,c;
int a[1002][1002] = {0};
int main(){
	scanf("%d %d\n%d %d",&n,&m,&r,&c);
	int sum=1;
	int left = 1,top=1,bot=n,right=m;
	while(left<=right&&top<=bot){
		
		//正序 ,左->右 
		for(int i=left;i<=right;i++){
			a[top][i] = sum;
			sum++;
		}
		fR = 1;
		top++;
		if(!(left<=right&&top<=bot)) break;
		
		//上->下 
		for(int i=top;i<=bot;i++){
				a[i][right] = sum;
				sum++;
			}
		right--;
		if(!(left<=right&&top<=bot)) break;
		
		//右->左
		for(int i=right;i>=left;i--){
			a[bot][i] = sum;
			sum++;
		}
		bot--;
		if(!(left<=right&&top<=bot)) break;
		
		//下->上
		for(int i=bot;i>=top;i--) {
			a[i][left] = sum;
			sum++;
		}
		left++;
	}
	
//	for(int i=1;i<=n;i++){
//		for(int j=0;j<=m;j++){
//			cout << a[i][j] << " ";
//		}
//		cout << endl;
//	}
	
	cout << a[r][c];
	return 0;
}

T8:摆动序列

【问题描述】
  如果一个序列的奇数项都比前一项大,偶数项都比前一项小,则称为一个摆动序列。即 a[2i]<a[2i-1], a[2i+1]>a[2i]。
  小明想知道,长度为 m,每个数都是 1 到 n 之间的正整数的摆动序列一共有多少个。
【输入格式】
  输入一行包含两个整数 m,n。
【输出格式】
  输出一个整数,表示答案。答案可能很大,请输出答案除以10000的余数。
【样例输入】
3 4
【样例输出】
14
【样例说明】
以下是符合要求的摆动序列:
2 1 2
2 1 3
2 1 4
3 1 2
3 1 3
3 1 4
3 2 3
3 2 4
4 1 2
4 1 3
4 1 4
4 2 3
4 2 4
4 3 4
【评测用例规模与约定】
对于 20% 的评测用例,1 <= n, m <= 5;
对于 50% 的评测用例,1 <= n, m <= 10;
对于 80% 的评测用例,1 <= n, m <= 100;
对于所有评测用例,1 <= n, m <= 1000。

注意: 序列的数是可以重复的

emm ……我的暴力求解只能过50%,正解应该用动态规划做

#include<bits/stdc++.h> 
typedef long long ll;
using namespace std;

int n,m,sum=0;
vector<int> a;
int main(){
	scanf("%d %d",&n,&m);
	
	a.push_back(0);
	for(int i=1;i<=m;i++){
		for(int j=0;j<=n/2;j++){
			a.push_back(i);
		}
	}
	set<vector<int> > b;
	
	do{
		int flag = 1;
		for(int i=2;i<=n;i++){
			if((i%2==1)&&(a[i]<=a[i-1])){
				flag = 0;
			}
			if((i%2==0)&&(a[i]>=a[i-1])){
				flag = 0;
			}
		}
		
		if(flag){
			vector<int> c;
			for(int i=1;i<=n;i++){
				c.push_back(a[i]);
			}
			b.insert(c);
		}
	}while(next_permutation(a.begin()+1,a.end()));
	cout << b.size()%10000;
	return 0;
}

参考博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值