蓝桥杯算法练习笔记(1)__字符串和日期
发布日期:2021-04-30 21:04:15 浏览次数:100 分类:精选文章

本文共 4136 字,大约阅读时间需要 13 分钟。

《计蒜客2019年蓝桥杯算法训练营》笔记

1. ASCII码值

ASCII码是计算机中最基本的字符编码方式,用于表示文本字符。以下是常用字符的ASCII码值:

  • 48:空格
  • 65:A
  • 97:a

在C++中,可以通过简单的算术运算将字符转化为ASCII码。例如:

int main() {    char c1 = 'A';    cout << (char)(c1 + 1) << endl;}

输出结果会是B,说明字符'A'的ASCII码值为65。


2. 字母三角形

1. 字母三角形基础实现

以下是字母三角形的经典实现代码:

#include 
#include
using namespace std;int main() { int n; cin >> n; for (int i = 1; i <= n; ++i) { string space(n - i, ' '); string ch(2 * i - 1, 'A' + i - 1); cout << space + ch + space + ch << endl; }}
  • 输入:5
  • 输出:
    AABAABCBAABCDCBAABCDEDCBAABCDEFEDCBA

2. 字母三角形升级版本

以下是对字母三角形的升级版本,支持输入任意字符:

#include 
#include
using namespace std;int main() { char c; cin >> c; if (c > 'A' && c < 'Z') { for (int i = 1; i <= c - 'A' + 1; ++i) { for (int j = 1; j <= c - 'A' + 1 - i; ++j) { cout << " "; } for (int j = 1; j <= i; ++j) { cout << ('A' + j - 1); } for (int j = i - 1; j >= 1; --j) { cout << ('A' + j - 1); } cout << endl; } } else { for (int i = 1; i <= c - '1' + 1; ++i) { for (int j = 1; j <= i; ++j) { cout << " "; } cout << ('1' + j - 1); for (int j = i - 1; j >= 1; --j) { cout << ('1' + j - 1); } cout << endl; } }}
  • 输入:F
  • 输出:
    AABAABCBAABCDCBAABCDEDCBAABCDEFEDCBA

3. 字符串与字符数组

1. 字符串与字符数组的基本概念

  • 字符串在C++中是不可变的,且以"\0"结尾。
  • 字符数组是可变的,同样以"\0"结尾。
  • 在C++中,string类型可以直接进行赋值操作,而不会修改原数组。

2. 字符串操作函数

  • strcpy:复制字符串。
  • strcat:拼接字符串。
  • strcmp:比较字符串。

例如:

#include 
#include
int main() { char name[10]; char *str = "abcdefg"; strcpy(name, str); printf("%s\n", name); return 0;}

3. 字符串出现次数统计

以下是统计字符串中某字符出现次数的代码:

#include 
#include
int main() { char s1[1005], s2[1005]; int len1 = strlen(s1) - 1; int len2 = strlen(s2) - 1; int ans = 0; for (int i = 0; i < len2; ++i) { if (s1[i] == s2[i]) { ans++; } } cout << ans << endl;}

4. 日期判断

1. 判断今天是星期几

可以通过两种方法实现:

方法一:模拟法

#include 
using namespace std;int whatday(int y, int m, int d) { int ans = 0; for (int i = 1; i <= y; ++i) { if ((i % 100 != 0 && i % 4 == 0) || (i % 400 == 0)) { ans += (d - 1) % 7; } else { ans += 365 % 7; } if (m == 11) { if (d > 30) { ans += (d - 31) % 7; } else { ans += (d - 1) % 7; } } else if (m == 4) { ans += (d - 1) % 7; } else { ans += (d - 1) % 7; } ans %= 7; } string weekday[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}; return ans;}int main() { int y, m, d; cin >> y >> m >> d; cout << weekday[whatday(y, m, d)] << endl;}

方法二:菜吉姆拉尔森公式

#include 
using namespace std;int main() { int w, d, m, y; cout << "年"; cin >> y; cout << "月"; cin >> m; cout << "日"; cin >> d; if (m == 1) { m = 13; y--; } else if (m == 2) { m = 14; y--; } int h = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7; cout << "星期" << (h + 1) << endl;}

5. 小明圈宝藏问题

以下是小明圈宝藏问题的代码示例:

#include 
using namespace std;int main() { int n, m; cin >> n >> m; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j) { cout << "+-"; } cout << "+" << endl; }}

6. 日期计算

以下是日期计算的代码示例:

#include 
#include
using namespace std;int day[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int main() { int y, m, d, k; scanf("%d%d%d%d", &y, &m, &d, &k); for (int i = 1; i <= k; ++i) { if ((y % 100 != 0 && y % 4 == 0) || (y % 400 == 0)) { day[2] = 29; } else { day[2] = 28; } d++; if (d == day[m] + 1) { d = 1; m++; } if (m == 13) { m = 1; y++; } } printf("%04d-%02d-%02d", y, m, d);}
上一篇:idea修改git账号及密码的方法
下一篇:IDEA的Debug窗口被拖出,怎么还原

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2026年05月25日 06时11分54秒