2021蓝桥杯国赛B组C/C++个人记录

以下为个人场上所提交答案,欢迎大家指出错误,后续会更正正确题解。




2021蓝桥杯国赛B组C/C++个人记录_第1张图片

个人提交:25

说明: Mbps是M bit per second, MB是 M Byte,bit是比特,Byte是字节,1Byte=8bit, 200/8=25




2021蓝桥杯国赛B组C/C++个人记录_第2张图片
个人提交:21844 (有误)
改正:1903

说明:只有每个位都为1、3、5、7之一才是题目所说的纯质数。还有一个条件当时没注意到,这个数本身也要是素数,应该先用埃氏筛法。

代码:

#include
#include

const int MAX_N = 20210605;
int num[MAX_N + 1];
int sum = 0;

void solve(int x) {
     
	int isPrime = 1;
	while(x > 0) {
     
		int b = x%10; //b为x的个位数字
		if(!(b == 2 || b == 3 || b == 5 || b == 7)) {
     
			isPrime = 0;
			break;
		}
		x = x/10;
	}
	if(isPrime) sum++;
}

int main() {
     
	memset(num, 1, sizeof(num));
	for(int i = 2; i < 20210605; i++) {
     
		for(int j = 2; i*j <= 20210605; j++) {
     
			num[i*j] = 0;
		}
	}
	for(int i = 1; i <= 20210605; i++) {
     
		if(num[i]) solve(i);
	}
	printf("%d\n", sum);
	return 0;
}






2021蓝桥杯国赛B组C/C++个人记录_第3张图片个人提交:977

说明:现场写日期类太麻烦,直接用excel搞数据,然后用c处理

在这里插入图片描述
先在excel中敲入这两格内容,第三格做个差,看看一共有多少天
2021蓝桥杯国赛B组C/C++个人记录_第4张图片
在这里插入图片描述
得7699,从A1格往下拉7669行,得到从2001/1/1到2021/12/31的每一天
2021蓝桥杯国赛B组C/C++个人记录_第5张图片为了方便处理数据,把刚才不用的删掉,并且把表格另存为.csv文件

2021蓝桥杯国赛B组C/C++个人记录_第6张图片数据有了,直接全选复制,接下来用c/c++处理

#include
#include
#include
using namespace std;

int res = 0;

void solve(int x) {
     
	for(int i = 0; i < 100; i++) {
     
		if(i * i == x) res++;
	}
}

int main() {
     
	string line;
	while(getline(cin, line)) {
     
		int len = line.length();
		int sum = 0;
		for(int i = 0; i < len; i++) {
     
			if(isdigit(line[i])) sum += line[i] - '0';
		}
		solve(sum);
		cout << res << endl;
	}
}

得出结果977





2021蓝桥杯国赛B组C/C++个人记录_第7张图片个人提交:2667336761

说明:不会dp,赌了一把完全二叉树

#include
using namespace std;

const int MAX_N = 2021; //结点个数,用完全二叉树的编号代表结点 

long long C(long long x) {
     
	if(x > MAX_N) return 0;
	return 1 + C(2*x) + C(2*x+1);
}

long long W(long long x) {
     
	if(x > MAX_N) return 0;
	return 1 + 2*W(2*x) + 3*W(2*x+1) + C(2*x)*C(2*x)*C(2*x+1);
}

int main() {
     
	cout << W(1) << endl;
	return 0;
}






2021蓝桥杯国赛B组C/C++个人记录_第8张图片2021蓝桥杯国赛B组C/C++个人记录_第9张图片
代码:

#include
#include
#include

char s[110];

int main() {
     
	scanf("%s", s);
	for(int i = 0; i < strlen(s); i++)
		printf("%c", toupper(s[i]));
	return 0;
}






2021蓝桥杯国赛B组C/C++个人记录_第10张图片2021蓝桥杯国赛B组C/C++个人记录_第11张图片2021蓝桥杯国赛B组C/C++个人记录_第12张图片常规写法,过40%用例


先写到这,后期补上

你可能感兴趣的:(算法竞赛,算法,c++)