目录

P10385 [蓝桥杯 2024 省 A] 艺术与篮球 - 洛谷 (luogu.com.cn)

P8706 [蓝桥杯 2020 省 AB1] 解码 - 洛谷 (luogu.com.cn)

P8711 [蓝桥杯 2020 省 B1] 整除序列 - 洛谷 (luogu.com.cn)

P8722 [蓝桥杯 2020 省 AB3] 日期识别 - 洛谷 (luogu.com.cn)


P10385 [蓝桥杯 2024 省 A] 艺术与篮球 - 洛谷 (luogu.com.cn)

先把日期一个个列出来,然后逐一判断

#include<iostream>
using namespace std;
int jud(int year, int month, int day) {
	int sum = 0;
	int s[8] = { 0 };
	s[0] = year / 1000 % 10;
	s[1] = year / 100 % 10;
	s[2] = year / 10 % 10;
	s[3] = year / 1 % 10;
	s[4] = month / 10 % 10;
	s[5] = month / 1 % 10;
	s[6] = day / 10 % 10;
	s[7] = day / 1 % 10;
	for (int i = 0; i < 8; i++) {
		switch (s[i]) {
		case 0:
			sum += 13;
			break;
		case 1:
			sum += 1;
			break;
		case 2:
			sum += 2;
			break;
		case 3:
			sum += 3;
			break;
		case 4:
			sum += 5;
			break;
		case 5:
			sum += 4;
			break;
		case 6:
			sum += 4;
			break;
		case 7:
			sum += 2;
			break;
		case 8:
			sum += 2;
			break;
		case 9:
			sum += 2;
			break;
		}
	}
	return sum;
}
int main() {
	int year = 2000;
	int month = 1;
	int day = 1;
	int count = 1;
	while (1) {
		int flag = 0;
		if (year % 100 != 0) {
			if (year % 4 == 0)flag = 1;
		}
		else {
			if (year % 400 == 0)flag = 1;
		}
		day++;
		if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
			if (day > 31) {
				month++;
				day = 1;
			}
		}
		else if (month == 2) {
			if (flag) {
				if (day > 29) {
					month++;
					day = 1;
				}
			}
			else {
				if (day > 28) {
					month++;
					day = 1;
				}
			}
		}
		else {
			if (day > 30) {
				month++;
				day = 1;
			}
		}
		if (month > 12) {
			year++;
			month = 1;
		}
		int sum = jud(year, month, day);
		if (sum > 50)count++;
		if (year == 2024 && month == 4 && day == 13) {
			cout << count << endl;
			return 0;
		}
	}
}

P8706 [蓝桥杯 2020 省 AB1] 解码 - 洛谷 (luogu.com.cn)

设输入的是a,输出的是b,遍历a,如果a中该项是字母则存到b中,如果是数字(假设是p),则用while循环让b的前一项重复p遍

注意点是int p = a[i] - '0'-1;

b数组记得开大一点

不过有个让我很疑惑的地方,a中居然有数字1(一开始设置检测2到9只能AC一个)?题目中说了连续的才能改,如果只有1个字母的话也算不上连续吧?总感觉样例有点问题

#include<iostream>
#include<string>
using namespace std;
int main() {
	string a;
	cin >> a;
	string b[1000000];
	int t = 0;
	for (int i = 0; i < a.size(); i++) {
		if (a[i] >= '1' && a[i] <= '9') {
			int p = a[i] - '0'-1;
			while (p--) {
				b[t] = b[t - 1];
				t++;
			}
		}
		else {
			b[t] = a[i];
			t++;
		}
	}
	for (int i = 0; i < t; i++) {
		cout << b[i];
	}
	return 0;
}

P8711 [蓝桥杯 2020 省 B1] 整除序列 - 洛谷 (luogu.com.cn)

目前做过的最水的题,注意开long long

#include<iostream>
using namespace std;
int main() {
	long long n; cin >> n;
	while (n) {
		cout << n << " ";
		n /= 2;
	}
	return 0;
}

P8722 [蓝桥杯 2020 省 AB3] 日期识别 - 洛谷 (luogu.com.cn)

#include<iostream>
#include<string>
using namespace std;
int main() {
	string a;
	cin >> a;
	string b[3];
	if (a[0] == 'J') {
		if (a[1] == 'a') cout << 1;
		else {
			if (a[3] == 'n')cout << 6;
			else cout << 7;
		}
	}
	else if (a[0] == 'F')cout << 2;
	else if (a[0] == 'M') {
		if (a[2] == 'r')cout << 3;
		else cout << 5;
	}
	else if (a[0] == 'A') {
		if (a[1] == 'p')cout << 4;
		else cout << 8;
	}
	else if (a[0] == 'S')cout << 9;
	else if (a[0] == 'O')cout << 10;
	else if (a[0] == 'N')cout << 11;
	else if (a[0] == 'D')cout << 12;
	cout << " ";
	int c = (a[3] - '0') * 10 + a[4] - '0';
	cout << c;
	return 0;
}

 

Logo

集算法之大成!助力oier实现梦想!

更多推荐