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

以下为个人场上所提交答案,欢迎大家指出错误,后续会更正正确题解。个人提交:25说明: Mbps是M bit per second, MB是 M Byte,bit是比特,Byte是字节,1Byte=8bit, 200/8=25个人提交:21844 (有误)改正:1903说明:只有每个位都为1、3、5、7之一才是题目所说的纯质数。还有一个条件当时没注意到,这个数本身也要是素数,应该先用埃氏筛法。代码:#include<cstdio>#include<cstring>
摘要由CSDN通过智能技术生成

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




在这里插入图片描述

个人提交:25

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




在这里插入图片描述
个人提交:21844 (有误)
改正:1903

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

代码:

#include<cstdio>
#include<cstring>

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;
}






在这里插入图片描述个人提交:977

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

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

在这里插入图片描述数据有了,直接全选复制,接下来用c/c++处理

#include<cstdio>
#include<iostream>
#include<string>
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

赛后听了老师讲,其实遍历所有日期也不难

#include<cstdio>
#include<cmath>

int days[] = {
   0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int main() {
   
	int cnt = 0;
	for(int year = 2001; year <= 2021; year++) {
   
		if(year%4==0 && year%100!=0 || year%400 == 0) days[2] = 29; //闰年29天 
		else days[2] = 28; 											//平年28天 
		for(int month = 1; month <=12; month++) {
   
			for(int day = 1; day <= days[month]; day++) {
   
				int total = 0;
				int t = year;
				while(
  • 70
    点赞
  • 177
    收藏
    觉得还不错? 一键收藏
  • 56
    评论
评论 56
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值