当前位置: 首页 > news >正文

蓝桥杯:日期统计

文章目录

  • 问题描述
  • 解法一递归
  • 解法二:暴力破解

问题描述

在这里插入图片描述

首先我们要了解什么是子序列,就是一个序列之中可以忽略元素但是不能改变顺序之后获得的序列就叫做子序列。
如"123"就是"11234"的子序列而不是"11324"的子序列

解法一递归

#include <iostream>
#include<vector>
#include<algorithm>
#include<list>
#include<map>
#include<set>
#include<queue>
#include<string>
bool vis[202400000];
int pp[100] = {
		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
};
using namespace std;
int ans = 0;
bool checkd(int date) {
	if (vis[date])return false;
	vis[date] = 1;
	int date1 = date / 100%100;
	int date2 = date % 100;
	if (date1 > 12 || date1 < 1)return false;
	if (date1 == 1 || date1 == 3 || date1 == 5 || date1 == 7 || date1 == 8 || date1 == 10 || date1 == 12) {
		if (date2 <= 31 && date2 >= 1)return true;
	}
	else if (date1 == 2) {
		if (date2 <= 28&& date2 >= 1)return true;
	}
	else {
		if (date2 <= 30 && date2 >= 1)return true;
	}
	return false;
}
void dfs(int pos, int k, int date) {
	if (k == 8) {
		if (checkd(date)) {

			ans++;
		};
		return;
	}
	if (pos > 99) {
		return;
	}
	if (pp[pos] == 2 && k == 0 || pp[pos] == 0 && k == 1 || pp[pos] == 2 && k == 2 || pp[pos] == 3 && k == 3 ||
		pp[pos] <= 1 && k == 4 || pp[pos] <= 9 && k == 5 || pp[pos] <= 3 && k == 6 || pp[pos] <= 9 && k == 7)
	{
		dfs(pos + 1, k + 1, date * 10 + pp[pos]);
	}

	dfs(pos + 1, k, date);
}
int main()
{
	

	dfs(0, 0, 0);
	cout << ans;
	return 0;
}

首先我们创建函数dfs(),pos代表数组位置,k代表位数,date表示当前的日期,其中date * 10 + pp[pos]是保存当前日期,我们迭代到位数k==8 return但是要检查date是否合法

因为date有可能出现13,14之类的写一个checkd函数如果查到合法ans++,bool vis是检查日期是否重复的函数。 完成这一位搜索之后dfs(pos + 1, k, date);,直到pos>99 return

在这里插入图片描述

解法二:暴力破解

解法二直接穷举2023所有的日期,看序列中有没有,这样就不要判断重复,也不用判断是否合法,直接从第一个位置到最后一个位置,输出ans就可以,代码也会少很多


#include <bits/stdc++.h>
#include<string>
#include<vector> 
using namespace std;


int main()
{
	int day[] = { 1,31,28,31,30,31,30,31,31,30,31,30,31 };

	int ans = 0;
	int arr[100] = {
		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
	};

	for (int i = 1; i <= 12; i++) {
		for (int j = 1; j <= day[i]; j++) {
			int date[] = { 1,2,0,2,3,i / 10,i % 10,j / 10,j % 10 };

			int	id = 1;
			for (int c = 0; c < 100; c++)
			{


				if (arr[c] == date[id]) {
					id++;
				}
				if (id > 8) {
					ans++;

					break;
				}
			}

		}
	}
	cout << ans;
	return 0;
}

在这里插入图片描述

相关文章:

  • 基于STM32、HAL库的CH224K 快充协议芯片简介及驱动程序设计
  • AI平台如何实现推理?数算岛是一个开源的AI平台(主要用于管理和调度分布式AI训练和推理任务。)
  • 【Java设计模式】第7章 建造者模式讲解
  • class与构造函数
  • Podman配置
  • AI在未来会不会代替人工???
  • Redis中AOF的实现方式和AOF重写
  • 运动规划实战案例 | 基于可视图的路径规划算法(附ROS C++/Python仿真)
  • 动态列表的数据渲染、新增、编辑等功能开发及数据处理
  • MySQL安装与基础配置(Windows版以及linux版)
  • RISCV GCC 4 后端优化
  • 国产数据库 YanshanDB 和 达梦数据库 的选型
  • PHP MySQL 创建数据库
  • 4S店汽车维修保养管理系统 (源码+lw+部署文档+讲解),源码可白嫖!
  • Spring MVC 操作会话属性详解(@SessionAttributes 与 @SessionAttribute)
  • 第二十五章:Python-pyecharts 库实现 3D 地图绘制
  • css单位
  • 通信协议详解(十):PSI5 —— 汽车安全传感器的“抗干扰狙击手”
  • el-input 中 select 方法使用报错:属性“select”在类型“HTMLElement”上不存在
  • Redis 下载 — Ubuntu22.04稳定版,配置
  • 惠州网站建设/河南做网站的公司
  • asp.net 网站 代理/seo排名赚app靠谱吗
  • 湖南网站建设哪家好/线上宣传方案
  • 可以做初中地理题的网站/邵阳seo排名
  • 企业网站建设运营/广告联盟全自动赚钱系统
  • 沧州网站排名优化/友情链接怎么连