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

顺子日期(蓝桥杯)

文章目录

  • 顺子日期
    • 问题描述
    • 答案:14
    • 字符串解题
      • C++
      • C语言
        • 指针
        • C语言函数
    • 数组解题

顺子日期

问题描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456 等。顺子日期指的就是在日期的 yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。例如 20220123 就是一个顺子日期,因为它出现了一个顺子:123; 而 20221023 则不是一个顺子日期,它一个顺子也没有。小明想知道在整个 2022 年份中,一共有多少个顺子日期?

答案:14

字符串解题

解题思路:枚举 2022 年所有的日期,然后判断是否存在顺子即可。
本题的顺子为顺序的三位数,包括 012,123,234,345,456,567,678,789。由于是 2022 年的日期,顺子只可能是 012 和 123,其余顺子不可能出现,因为其余均为非法日期。
最终只需枚举月、日,然后 check 一下每个日期中是否存在上述顺子即可。

C++

#include<iostream>
#include<string>
using namespace std;//to_string()代码原理 
//string To_string(int n)
//{
//	string s;
//	while(n!=0)
//	{
//		s+=n%10+'0';
//		n/=10;
//	}
//	reverse(s.begin(),s.end());
//	return s;
//}bool cheak(int year,int month,int day)
{string str=to_string(year);if(month<10) str+='0';str+=to_string(month);if(day<10) str+='0';str+=to_string(day);return (str.find("012")!=str.npos)||(str.find("123")!=str.npos);//等同于str.find("012")!=-1
}int main()
{int year=2022;int i,j;int ans=0;int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};for(i=1;i<=12;i++){for(j=1;j<=months[i];j++){if(cheak(year,i,j)==true){ans++;}}}cout<<ans<<endl;return 0;
}

C语言

指针
#include <stdio.h>
#include <stdlib.h>char str[8];// void reverse(char* left,char* right)//将字符串倒过来 
{while(left<right){char tmp=*left;*left=*right;*right=tmp;left++;right--;}
}void to_string(long int num)//将num变为字符串 
{int i=0;while(num!=0){str[i++]=num%10+'0';num=num/10;}reverse(str,str+8-1);
//  puts(str); 
}int fun(char* str,char* arr)//找字符串函数 
{int flag=0;//flag=3说明找到了 while(*str!=0){if(*str==*arr){arr++;flag++;}else{str=str-flag;//退回到原来的那一位,然后下面会str++进入到下一位 /*         20220112下标01234566-2=4    4++=5*/arr=arr-flag;flag=0;}if(flag==3)// {return 1;}str++;}return 0;
}int check(int year,int month,int day)
{long int num=year*10000+month*100+day;to_string(num);if(fun(str,"012")==1||fun(str,"123")==1){return 1;}return 0;
}int main()
{int year=2022;int manth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int i,j;int sum=0;for(i=1;i<=12;i++){for(j=1;j<=manth[i];j++){if(check(year,i,j)==1){sum++;}}}printf("%d",sum);return 0;
}
C语言函数
#include<stdio.h>
#include<string.h>
int main()
{char a[8];int count=0;int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};for(int i=1;i<=12;i++){for(int j=1;j<=months[i];j++){long long sum=2022*10000+i*100+j;sprintf(a,"%lld",sum);if(strstr(a,"012")!=NULL||strstr(a,"123")!=NULL)count++;}}printf("%d",count);return 0;}

数组解题

思路:数组的前四个已经确定为2022,然后枚举日期合法性,将日期存入数组中,判断第5,第6,第7个元素是否满足+1,判断第6,第7,第8个元素是否满足+1即可

#include<stdio.h>int main()
{int a[8]={2,0,2,2};int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int i,j;int count=0;for(i=1;i<=12;i++){a[4]=i/10;a[5]=i%10;for(j=1;j<=month[i];j++){a[6]=j/10;a[7]=j%10;if((a[4]+1==a[5]&&a[5]+1==a[6])||(a[5]+1==a[6]&&a[6]+1==a[7])){count++;}}}printf("%d",count);return 0;
}
http://www.lryc.cn/news/197831.html

相关文章:

  • 攻防世界web篇-unserialize3
  • 微信小程序 onLoad和onShow的区别
  • elementui select组件下拉框底部增加自定义按钮
  • 深入理解闭包:原理、应用与最佳实践
  • [NSSCTF 2nd]Math
  • uml知识点学习
  • JAVA学习日记1——JAVA简介及第一个java程序
  • Linux命令(102)之less
  • vue多条件查询
  • c 语言基础:L1-038 新世界
  • 计算机算法分析与设计(13)---贪心算法(多机调度问题)
  • 小程序canvas层级过高真机遮挡组件的解决办法
  • 番外8.1 配置+管理文件系统
  • 互联网Java工程师面试题·Java 总结篇·第八弹
  • VSCode修改扩展和用户文件夹目录位置(Windows)
  • Spring 事务
  • 无法访问 github ,解决办法
  • SD卡与emmc的异同
  • 机器学习笔记 - 3D 对象跟踪极简概述
  • 《机器学习----简单的分类器》第二章、朴素贝叶斯,项目:使用特征值给语句打标签
  • 01. 汇编LED驱动实验
  • Hadoop3教程(二十):MapReduce的工作机制总结
  • 浅谈AI大模型技术:概念、发展和应用
  • 【Leetcode】212.单词搜索II(Hard)
  • 146.LRU缓存
  • 使用transformers过程中出现的bug
  • Hadoop3教程(二十二):Yarn的基础架构与工作流程
  • 离线 notepad++ 添加到右键菜单
  • 怎么让英文大语言模型支持中文?--构建中文tokenization--继续预训练--指令微调
  • 笙默考试管理系统-MyExamTest----codemirror(35)