顺子日期(蓝桥杯)

编程入门 行业动态 更新时间:2024-10-10 11:22:20

<a href=https://www.elefans.com/category/jswz/34/1762783.html style=顺子日期(蓝桥杯)"/>

顺子日期(蓝桥杯)

文章目录

  • 顺子日期
    • 问题描述
    • 答案: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;
}

更多推荐

顺子日期(蓝桥杯)

本文发布于:2023-12-07 19:33:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1671647.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:顺子   日期   蓝桥杯

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!