【算法】枚举——蓝桥杯、日期统计、特殊日期(位数之和)、2023、特殊日期(倍数)、跑步锻炼

文章目录

  • 蓝桥杯
    • 日期统计
    • 特殊日期(位数之和)
    • 2023
    • 特殊日期(倍数)
    • 跑步锻炼

蓝桥杯

日期统计

日期统计

在这里插入图片描述

  如果暴力枚举100个数的八次循环那就是1016次运算,时间复杂度太高了,好在前四次的2023是确定的,所以我们优化一下,前四次循环不等于2023的就直接进入下一个循环,现在只需要108次运算了,注意有不少日子是重复的,所以还需要我们使用set去重一下。

  也可以不使用set,我们之间对2023年的365天遍历,如果数组中有满足2023年日期范围的数我们直接++,这样不仅减少了循环的次数(一共需要大概365*100=36500次循环),也避免了去重。

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

#if 0
int main()
{
  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
  };

  int months[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

  set<int> ret;
  for(int i=0;i<100;i++)
  {
    if(arr[i]!=2) continue;
    for(int j=i+1;j<100;j++)
    {
      if(arr[j]!=0) continue;
      for(int k=j+1;k<100;k++)
      {
        if(arr[k]!=2) continue;
        for(int l=k+1;l<100;l++)
        {
          if(arr[l]!=3) continue;
          for(int a=l+1;a<100;a++)
          {
            for(int b=a+1;b<100;b++)
            {
              for(int c=b+1;c<100;c++)
              {
                for(int d=c+1;d<100;d++)
                {
                	int date=arr[a]*1000+arr[b]*100+arr[c]*10+arr[d];
                	int month=arr[a]*10+arr[b];
                	int day=arr[c]*10+arr[d];
                  if(month>=1&&month<=12&&day>=1&&day<=months[month])
                  {
                    ret.insert(date);
                    //cout<<date<<endl;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  cout<<ret.size()<<endl;
  return 0;
}
#endif 

#if 1
int main() 
{
  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
  };

    int months[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int ret = 0;

    for (int month=1;month<=12;month++)
    {
      for(int day=1;day<months[12];day++)
      {
        int target[8]={2,0,2,3,month/10,month%10,day/10,day%10};
        int count=0;
        for(int i=0;i<100;i++)
        {
          if(arr[i]==target[count])
          {
            count++;
          }
          if(count==8)
          {
            ret++;
            break;
          }
        }
      }
    }
    cout<<ret<<endl;
    return 0;
}
#endif 

  

特殊日期(位数之和)

特殊日期

在这里插入图片描述
  我们根据题意直接暴力即可,注意一下闰年的判断year%400==0||(year%4==0&&year%100!=0) 继续将年份的数字之和和月份天数的日子和做比较。

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

int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

void is_gap_month(int year,int month)
{
  if(month==2&&year%400==0||(year%4==0&&year%100!=0))
  months[2]=29;
  else months[2]=28;
}

int is_target(int year,int month,int day)
{
  int sum1=0,sum2=0;
  while(year)
  {
    int cnt=year%10;
    sum1+=cnt;
    year/=10;
  }
  sum2=month/10+month%10+day/10+day%10;
  return sum1==sum2?1:0;
}

int main()
{
  int ret=0;
  for(int year=1900;year<=9999;year++)
  {
    for(int month=1;month<=12;month++)
    {
      is_gap_month(year,month);
      for(int day=1;day<=months[month];day++)
      {
        if(is_target(year,month,day))
        {
          ret++;
        }
      }
    }
  }
  cout<<ret<<endl;
  return 0;
}

  

2023

2023

在这里插入图片描述
  将每一个数从后向前依次取下末尾的数字,依次和3 2 0 2进行比较,如果这个数中完全包含2023,ret++。最后将所有的数减去完全包含的数,剩下的就是完全不包含的数,注意这里 98765432 - 12345678 之后还要加一。

#include <iostream>
using namespace std;

int is_target(int n)
{
    while (n)
    {
        int tmp1 = n % 10;
        n /= 10;
        if (tmp1 == 3)
        {
            while (n)
            {
                int tmp2 = n % 10;
                n /= 10;
                if (tmp2 == 2)
                {
                    while (n)
                    {
                        int tmp3 = n % 10;
                        n /= 10;
                        if (tmp3 == 0)
                        {
                            while (n)
                            {
                                int tmp4 = n % 10;
                                n /= 10;
                                    if(tmp4 == 2)
                                        return 1;
                            }
                        }
                    }
                }
            }
        }
    }
    return 0;
}

int main()
{
    int ret = 0;
    for (int i = 12345678; i <= 98765432; i++)
    {
        if (is_target(i))
        {
          //cout<<i<<endl;
          ret++;
        }
    }
    cout << 98765432 - 12345678 - ret+1;
    //cout<<"85959030";
    return 0;
}

  

特殊日期(倍数)

特殊日期
在这里插入图片描述

#include <iostream>
using namespace std;

int main()
{
  int ret=0;
  int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  for(int year=2000;year<=2000000;year++)
  {
    for(int month=1;month<=12;month++)
    {
      if(year%month==0)
      {
        if(month==2&&(year%400==0||(year%4==0&&year%100!=0)))
        {
          months[2]=29;
        }
        else
        {
          months[2]=28;
        }
        for(int day=1;day<=months[month];day++)
        {
          if(year%day==0)
          {
            ret++;
          }
          if(year==2000000&&month==1&&day==1)
          {
            cout<<ret<<endl;
          }
        }
      }
    }
  }
  //cout<<"35813063"<<endl;
  return 0;
}

  

跑步锻炼

跑步锻炼

在这里插入图片描述

#include <iostream>
using namespace std;

int is_gap_year(int n)
{
  if((n%400==0)||(n%4==0&&n%100!=0))
    return 1;
  else return 0;
}

int main()
{
  int ret=0;
  int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  int year=0,month=0,day=0;
  int week=6;
  for(int i=2000;i<=2020;i++)
  {
    for(int j=1;j<=12;j++)
    {
      if(j==2&&is_gap_year(i)) months[2]=29;else months[2]=28;
      for(int k=1;k<=months[j];k++)
      {
        if(week==8)
        { 
          week=1;
        }
        if(week==1||k==1) 
        {
          ret+=2;
        }
        else
        { 
          ret+=1;
        }
        week++;
        if(i==2020&&j==10&&k==1)
        cout<<ret;
      }
    }
  }
  return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/372562.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【实用原创】20个Python自动化脚本,解放双手、事半功倍

在当今的快节奏工作环境中&#xff0c;自动化不再是一种奢侈&#xff0c;而是提高效率和精确性的必需手段。Python&#xff0c;以其易于学习和强大的功能而闻名&#xff0c;成为实现各种自动化任务的理想选择。无论是数据处理、报告生成&#xff0c;还是日常的文件管理&#xf…

如何配置SSH实现无公网ip远程连接访问Deepin操作系统

&#x1f4d1;前言 本文主要是配置SSH实现无公网ip远程连接访问Deepin操作系统的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️** &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &…

06 MP之自动填充+SQL执行的语句和速度分析

1. 自动填充 在项目中有一些属性&#xff0c;比如常见的创建时间和更新时间可以设置为自动填充。 1.1 实例 需求: 将创建时间和更新时间设置为自动填充, 这样每次插入数据时可以不用理会这两个字段 1.1.1 在数据库增加字段 默认开启驼峰映射 createTime --> create_time…

Linux环境下的基本指令

最便捷Linux环境就是用云服务器&#xff0c;下载一个远程终端软件进行操作即可。 远程终端软件这里我比较推荐XShell软件&#xff0c;下载官网https://www.netsarang.com/products/xsh_overview.html 下载安装的时候选择 "home/school" 则为免费版本。 查看 Linux …

加速大规模商业化!量子信息公司Infleqtion收购两家集成硅光子公司

​内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 编辑丨慕一 编译/排版丨卉可 沛贤 深度好文&#xff1a;1200字丨10分钟阅读 近期&#xff0c;美国量子信息公司Infleqtion宣布成功收购两家集成硅光子公司&#xff1a;SiNoptiq公司和Morton…

从小白到入门webrtc音视频通话

0. 写在前面 先会骑车&#xff0c;再研究为什么这么骑&#xff0c;才是我认为学习技术的思路&#xff0c;底部付了demo例子&#xff0c;根据例子上面的介绍即可运行。 1. 音视频通话要用到的技术简介 websocket 介绍&#xff1a;1. 服务器可以向浏览器推送信息&#xff1b;2…

CSS的Day05(浮动+flex布局)

跟着黑马程序员的课&#xff0c;稍稍对CSS的了解 常见的显示模式&#xff1a;行内、块级、行内块 在HTML中&#xff0c;标准流也称为文档流或普通流&#xff0c;是指元素按照其在HTML文档中的出现顺序依次排列的方式。在标准流中&#xff0c;元素会自动占据父容器的空间&#…

哪些骨传导蓝牙立体声耳机好?骨传导蓝牙立体声耳机高性价比推荐

对许多人来说&#xff0c;音乐已成为他们日常生活的一部分。不论是作为运动的动力还是休闲放松时的柔和旋律&#xff0c;优质的耳机能极大地丰富我们的听觉享受。如果你对传统入耳式的不适感到厌烦&#xff0c;那么骨传导蓝牙立体声耳机将会是你理想的替代品。很多人就问了&…

for循环的多重跳出

for的多重跳出 1.前言2.标签使用3.使用异常的方式 本文在jdk17中测试通过 1.前言 前段时间面试时&#xff0c;面试官问我多重for循环如何跳出&#xff0c;我懵了&#xff0c;今天特别的研究了一下 本文主要说的不是continue与break&#xff0c;而是少用的另类操作 1.continue:…

支持向量机

支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;是一个非常优雅的算法&#xff0c;具有非常完善的数学理论&#xff0c;常用于数据分类&#xff0c;也可以用于数据的回归预测中。支持向量机在许多领域都有广泛的应用&#xff0c;如文本分类、图像识别…

SpringBoot中的WebMvcConfigurer

SpringBoot中的WebMvcConfigurer 一、WebMvcConfigurer二、页面跳转控制器三、数据格式化1.Formatter\<T>2.内容转换器 四、拦截器 一、WebMvcConfigurer WebMvcConfigurer 作为配置类&#xff0c;采用 JavaBean 的形式来代替传统的 XML 配置文件形式&#xff0c;进而针…

【Linux】文件周边002之初步理解文件管理(打开的文件)

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.&#xff08;打开…

SSH免密切换服务器案例-ssh协议(公钥和私钥)

公钥和私钥理解 公钥提供加密&#xff0c;私钥解密&#xff0c;公钥可以共享&#xff0c;私钥不可以。举例公钥相当于锁头&#xff0c;可以给别人用&#xff0c;钥匙相当于私钥&#xff0c;只能开自己发出去的锁头&#xff0c;也就是私钥和公钥成对&#xff0c;私钥只能解密对…

Go指针探秘:深入理解内存与安全性

目录 1. 指针的基础1.1 什么是指针&#xff1f;1.2 内存地址与值的地址1.2.1 内存中的数据存储1.2.2 如何理解值的地址 2. Go中的指针操作2.1 指针类型和值2.1.1 基本数据类型的指针2.1.2 复合数据类型的指针 2.2 如何获取一个指针值2.3 指针&#xff08;地址&#xff09;解引用…

框架学习Maven

声明&#xff1a;本文来源于黑马程序员PDF讲义 做为一名Java开发工程师&#xff0c;后端 Web开发技术是我们学习的重点&#xff0c;后端Web开发技术的学习&#xff0c;我们会先学习Java项目的构建工具&#xff1a;Maven 初识Maven Maven是Apache旗下的一个开源项目&#xff…

建筑行业数字化:从设计到运维的全面革新

随着科技的快速发展&#xff0c;数字化技术在各行各业中的应用越来越广泛。建筑行业作为传统产业&#xff0c;也在积极拥抱数字化技术&#xff0c;以提高效率、降低成本并实现可持续发展。本文将主要探讨建筑行业数字化的几个关键领域&#xff0c;包括建筑设计数字化、施工管理…

【爬虫作业】python爬虫作业——爬取汽车之家

爬取汽车之家期末作业&#xff1a; 代码如下所示&#xff1a; import random import timeimport requests #发送网络请求 import parsel import csv # 1.发送网络请求 headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like G…

LFU缓存(Leetcode460)

例题&#xff1a; 分析&#xff1a; 这道题可以用两个哈希表来实现&#xff0c;一个hash表&#xff08;kvMap&#xff09;用来存储节点&#xff0c;另一个hash表&#xff08;freqMap&#xff09;用来存储双向链表&#xff0c;链表的头节点代表最近使用的元素&#xff0c;离头节…

APN设置流程分析

源码流程分析 前期概要 此流程分析是在不同平台可能不一致,只能作为参考文档,是属于一个通用流程文档。 源码分析 入口 首先是界面,我在此平台的界面如下: 对应的入口源码位置在Settings的ApnSettings中

CAN通信----(创芯科技)CAN分析仪----转CANTest使用

点击进入官方链接进行下载创芯科技 CAN分析仪资料包&#xff1a; 创芯科技的官网&#xff1a;https://m.zhcxgd.com/ 我使用的是至尊版红色带OBD转接头的&#xff1a; 所有下图是我选择…