怎么制作网站导航页,泉州响应式网站建设,建设网站系统,网站备案主体域名文章目录 顺子日期问题描述答案#xff1a;14字符串解题CC语言指针C语言函数 数组解题 顺子日期
问题描述
本题为填空题#xff0c;只需要算出结果后#xff0c;在代码中使用输出语句将所填结果输出即可。 小明特别喜欢顺子。顺子指的就是连续的三个数字#xff1a;123、… 文章目录 顺子日期问题描述答案14字符串解题CC语言指针C语言函数 数组解题 顺子日期
问题描述
本题为填空题只需要算出结果后在代码中使用输出语句将所填结果输出即可。 小明特别喜欢顺子。顺子指的就是连续的三个数字123、456 等。顺子日期指的就是在日期的 yyyymmdd 表示法中存在任意连续的三位数是一个顺子的日期。例如 20220123 就是一个顺子日期因为它出现了一个顺子123 而 20221023 则不是一个顺子日期它一个顺子也没有。小明想知道在整个 2022 年份中一共有多少个顺子日期?
答案14
字符串解题
解题思路枚举 2022 年所有的日期然后判断是否存在顺子即可。 本题的顺子为顺序的三位数包括 012,123,234,345,456,567,678,789。由于是 2022 年的日期顺子只可能是 012 和 123其余顺子不可能出现因为其余均为非法日期。 最终只需枚举月、日然后 check 一下每个日期中是否存在上述顺子即可。
C
#includeiostream
#includestring
using namespace std;//to_string()代码原理
//string To_string(int n)
//{
// string s;
// while(n!0)
// {
// sn%100;
// n/10;
// }
// reverse(s.begin(),s.end());
// return s;
//}bool cheak(int year,int month,int day)
{string strto_string(year);if(month10) str0;strto_string(month);if(day10) str0;strto_string(day);return (str.find(012)!str.npos)||(str.find(123)!str.npos);//等同于str.find(012)!-1
}int main()
{int year2022;int i,j;int ans0;int months[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};for(i1;i12;i){for(j1;jmonths[i];j){if(cheak(year,i,j)true){ans;}}}coutansendl;return 0;
}C语言
指针
#include stdio.h
#include stdlib.hchar str[8];// void reverse(char* left,char* right)//将字符串倒过来
{while(leftright){char tmp*left;*left*right;*righttmp;left;right--;}
}void to_string(long int num)//将num变为字符串
{int i0;while(num!0){str[i]num%100;numnum/10;}reverse(str,str8-1);
// puts(str);
}int fun(char* str,char* arr)//找字符串函数
{int flag0;//flag3说明找到了 while(*str!0){if(*str*arr){arr;flag;}else{strstr-flag;//退回到原来的那一位然后下面会str进入到下一位 /* 20220112下标01234566-24 45*/arrarr-flag;flag0;}if(flag3)// {return 1;}str;}return 0;
}int check(int year,int month,int day)
{long int numyear*10000month*100day;to_string(num);if(fun(str,012)1||fun(str,123)1){return 1;}return 0;
}int main()
{int year2022;int manth[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};int i,j;int sum0;for(i1;i12;i){for(j1;jmanth[i];j){if(check(year,i,j)1){sum;}}}printf(%d,sum);return 0;
}C语言函数
#includestdio.h
#includestring.h
int main()
{char a[8];int count0;int months[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};for(int i1;i12;i){for(int j1;jmonths[i];j){long long sum2022*10000i*100j;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即可
#includestdio.hint 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 count0;for(i1;i12;i){a[4]i/10;a[5]i%10;for(j1;jmonth[i];j){a[6]j/10;a[7]j%10;if((a[4]1a[5]a[5]1a[6])||(a[5]1a[6]a[6]1a[7])){count;}}}printf(%d,count);return 0;
}