0


蓝桥杯赛前模拟

试题 A: 合数个数
本题总分:5 分
【问题描述】
一个数如果除了 1 和自己还有其他约数,则称为一个合数。例如:1, 2, 3
不是合数,4, 6 是合数。
请问从 1 到 2020 一共有多少个合数。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int i,j,sum;
  5. sum = 0;
  6. for(i = 4;i<=2020;i++)
  7. {
  8. for(j = 2;j<i;j++)
  9. {
  10. if(i%j==0)
  11. {
  12. sum++;
  13. break;
  14. }
  15. }
  16. }
  17. printf("%d",sum);
  18. return 0;
  19. }

试题 B: 含 2 天数
本题总分:5 分
【问题描述】
小蓝特别喜欢 2,今年是公元 2020 年,他特别高兴,因为每天日历上都可
以看到 2。
如果日历中只显示年月日,请问从公元 1900 年 1 月 1 日到公元 9999 年 12
月 31 日,一共有多少天日历上包含 2。即有多少天中年月日的数位中包含数字
2。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

  1. #include <stdio.h>
  2. #include <stdbool.h>
  3. bool containsDigit2(int n) {
  4. // 判断 n 是否包含数字 2
  5. while (n > 0) {
  6. if (n % 10 == 2) {
  7. return true;
  8. }
  9. n /= 10;
  10. }
  11. return false;
  12. }
  13. int main() {
  14. int year, month, day;
  15. int total_days = 0; // 记录包含数字 2 的总天数
  16. for (year = 1900; year <= 9999; year++) {
  17. for (month = 1; month <= 12; month++) {
  18. int days_in_month;
  19. if (month == 2) {
  20. // 处理闰年和平年的情况
  21. if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
  22. days_in_month = 29;
  23. } else {
  24. days_in_month = 28;
  25. }
  26. } else if (month == 4 || month == 6 || month == 9 || month == 11) {
  27. days_in_month = 30;
  28. } else {
  29. days_in_month = 31;
  30. }
  31. for (day = 1; day <= days_in_month; day++) {
  32. // 判断当前日期是否包含数字 2
  33. if (containsDigit2(year) || containsDigit2(month) || containsDigit2(day)) {
  34. total_days++;
  35. }
  36. }
  37. }
  38. }
  39. printf("从1900年1月1日到9999年12月31日,共有%d天的年月日数位中包含数字2。\n", total_days);
  40. return 0;
  41. }

试题 C: 本质上升序列
本题总分:10 分
【问题描述】
小蓝特别喜欢单调递增的事物。
在一个字符串中,如果取出若干个字符,将这些字符按照在字符串中的顺
序排列后是单调递增的,则成为这个字符串中的一个单调递增子序列。
例如,在字符串 lanqiao 中,如果取出字符 n 和 q,则 nq 组成一个单
调递增子序列。类似的单调递增子序列还有 lnq、i、ano 等等。
小蓝发现,有些子序列虽然位置不同,但是字符序列是一样的,例如取第
二个字符和最后一个字符可以取到 ao,取最后两个字符也可以取到 ao。小蓝
认为他们并没有本质不同。
对于一个字符串,小蓝想知道,本质不同的递增子序列有多少个?
例如,对于字符串 lanqiao,本质不同的递增子序列有 21 个。它们分别
是 l、a、n、q、i、o、ln、an、lq、aq、nq、ai、lo、ao、no、io、lnq、
anq、lno、ano、aio。
请问对于以下字符串(共 200 个小写英文字母,分四行显示):(如果你把
以下文字复制到文本文件中,请务必检查复制的内容是否与文档中的一致。在
试题目录下有一个文件 inc.txt,内容与下面的文本相同)
tocyjkdzcieoiodfpbgcncsrjbhmugdnojjddhllnofawllbhf
iadgdcdjstemphmnjihecoapdjjrprrqnhgccevdarufmliqij
gihhfgdcmxvicfauachlifhafpdccfseflcdgjncadfclvfmad
vrnaaahahndsikzssoywakgnfjjaihtniptwoulxbaeqkqhfwl
本质不同的递增子序列有多少个?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. const int MAXN = 210;
  5. int dp[MAXN][27]; // 下标从 1 开始,字母下标从 1 开始
  6. int main() {
  7. char s[MAXN];
  8. cin >> (s + 1); // 字符串下标从 1 开始
  9. int n = strlen(s + 1);
  10. for (int i = 1; i <= n; i++) {
  11. dp[i][s[i] - 'a' + 1] = 1;
  12. for (int j = 1; j <= 26; j++) {
  13. for (int k = 1; k < j; k++) {
  14. if (s[i] > k + 'a' - 1) {
  15. dp[i][s[i] - 'a' + 1] += dp[i-1][k];
  16. }
  17. }
  18. }
  19. }
  20. int ans = 0;
  21. for (int i = 1; i <= n; i++) {
  22. for (int j = 1; j <= 26; j++) {
  23. ans += dp[i][j];
  24. }
  25. }
  26. cout << ans << endl;
  27. return 0;
  28. }
标签: 蓝桥杯 c++ 算法

本文转载自: https://blog.csdn.net/Allencc5658/article/details/129967481
版权归原作者 Allencc5658 所有, 如有侵权,请联系我们删除。

“蓝桥杯赛前模拟”的评论:

还没有评论