首页 > 编程语言 >第十四届蓝桥杯省赛c/c++大学B组 试题A:日期统计(无深搜暴力求解)

第十四届蓝桥杯省赛c/c++大学B组 试题A:日期统计(无深搜暴力求解)

时间:2023-04-12 22:45:51浏览次数:35  
标签:a1 int 31 30 c++ 蓝桥 a3 无深 a2

试题 A: 日期统计 本题总分:5 分 【问题描述】 小蓝现在有一个长度为 100 的数组,数组中的每个元素的值都在 0 到 9 的 范围之内。数组中的元素从左至右如下所示: 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1 0 0 9 4 8 0 9 1 2 8 5 0 2 5 3 3 现在他想要从这个数组中寻找一些满足以下条件的子序列: 1. 子序列的长度为 8; 2. 这个子序列可以按照下标顺序组成一个 yyyymmdd 格式的日期,并且 要求这个日期是 2023 年中的某一天的日期,例如 20230902,20231223。 yyyy 表示年份,mm 表示月份,dd 表示天数,当月份或者天数的长度只 有一位时需要一个前导零补充。 请你帮小蓝计算下按上述条件一共能找到多少个不同 的 2023 年的日期。 对于相同的日期你只需要统计一次即可。 【答案提交】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分


解题思路: 这题不少可能人没理解子序列的定义,子序列即原数组按下标递增规律所挑出的子集,同时这个递增可以是没有规则的(他可以从1跳到10再到30的位置,但就是不能从30回到1) 在确定年份2023固定之后,我们可以对原来的100大小的数组进行化简,得到一个新的数组。 然后将月份日期拆分成4个int型,a1是月份的第一个数字,a2是月份第二个数字。。。 同理将4个int型对应4个循环嵌套即可保证子序列的规则。 最后只需要判断4个数最后是否符合日期规则,若符合则放入set数组即可。   代码部分:
 1 #include<iostream>
 2 #include<set>
 3 #include<string>
 4 using namespace std;
 5 string str1= "3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1 0 0 9 4 8 0 9 1 2 8 5 0 2 5 3 3";
 6 string s;
 7 int get_month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
 8 set<int> date;
 9 bool date_judge(int a1,int a2,int a3,int a4)
10 {
11     int month=a1*10+a2;
12     int day=a3*10+a4;
13     if(get_month[month]<=day)
14         return false;
15     return false;
16 }
17 int main(){
18     for(int c:str1){
19         if(c !=' ')
20         {
21             s+=c;
22         }
23     }
24     for(int i=0;i<s.length();i++)
25     {
26         if(s[i]!='1'&&s[i]!='0')
27             continue;
28         for(int j=i+1;j<s.length();j++)
29         {
30             if(s[i]=='1'&&s[j]>'2')
31                 continue;
32             if(s[i]=='0'&&s[j]=='0')
33                 continue;
34             for(int k=j+1;k<s.length();k++)
35             {
36                 if(s[k]>'3')
37                     continue;
38                 for(int l=k+1;l<s.length();l++)
39                 {
40                     if(s[k]=='3'&&s[l]>'1')
41                         continue;
42                     if(s[k]=='0'&&s[l]=='0')
43                         continue;
44                     int a1=(s[i]-'0'),a2=(s[j]-'0'),a3=(s[k]-'0'),a4=(s[l]-'0');
45                     if (date_judge(a1,a2,a3,a4));
46                     {
47                         a1*=1000;
48                         a2*=100;
49                         a3*=10;
50                         int Date=a1+a2+a3+a4;
51                         date.insert(Date);
52                     }
53                 }
54             }
55         }
56     }
57     cout<<date.size()<<endl;
58 }

 

标签:a1,int,31,30,c++,蓝桥,a3,无深,a2
From: https://www.cnblogs.com/shenyuRin/p/17311607.html

相关文章

  • C++文件处理
    ......
  • c++ new和malloc
    1、new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持;2、使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。3、new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对......
  • c++指针参数传递和引用参数传递的区别
    1) 指针参数传递本质上是值传递,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,会在栈中开辟内存空间以存放由主调函数传递进来的实参值,从而形成了实参的一个副本(替身)。值传递的特点是,被调函数对形式参数的任何操作都是作为局部变量进行的,......
  • MSBUILD : error MSB3428: Could not load the Visual C++ component "VCBuild.exe".
    完整报错信息:MSBUILD:errorMSB3428:CouldnotloadtheVisualC++component"VCBuild.exe".Tofixthis,1)installthe.NETFramework2.0SDK,2)installMicrosoftVisualStudio2005or3)addthelocationofthecomponenttothesystempathifit......
  • C++第二章课后习题2-29,2-30
    2-29在程序中定义一个整型变量,倔以1~100的值。要求用户猜这个数,比较两个数的大小,把结果提示给用户,直到猜对为止。分别使用while、do…while语句实现循环。#include<iostream>usingnamespacestd;intmain(){inta=56;cout<<"请输入您要猜的数(0......
  • C语言或C++语言的多个文件共同处理资料之方法
    C语言和C++语言在多个文件互相包含时会产生顺序方面的冲突,为了实现多个文件处理共同的资料,我说一个实现它的方法。把对象资料放在资料文件,在设置资料的方法文件中导入资料文件,然后在主文件中导入资料文件和方法文件,用方法文件的方法设置资料。它们的特点是依照先后顺序导入,不互相......
  • [C++]LeetCode1147. 段式回文
    [C++]LeetCode1147.段式回文题目描述Difficulty:困难RelatedTopics:贪心,双指针,字符串,动态规划,哈希函数,滚动哈希你会得到一个字符串text。你应该把它分成k个子字符串(subtext1,subtext2,…,subtextk),要求满足:subtexti是非空字符串所有子字符串的连接......
  • PAT-basic-1028 人口普查 java c++
    一、题目某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是2014年9月6日,所以超过200岁的生日和未出生的生日都是不合理的,应该被过......
  • PAT-basic-1029 旧键盘 java c++
    一、题目旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。输入格式:输入在2行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过80个字符的串,由字母A-Z(包括......
  • c++基础 打卡1
    一、面向对象的编程语言有的特点。    ①面向对象的编程语言最大的特点是结构化程序,二结构化程序的设计思路是自顶向下、逐步求精;其程序化结构是按功能划分为若干个基本模块,这些模块形成一个树状结构;各模块之间的关系尽可能简单,在功能上相对独立;每个模块内部均是由顺序、......