赞
踩
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456 等。顺子日期指的就是在日期的 yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。例如 20220123 就是一个顺子日期,因为它出现了一个顺子:123; 而 20221023 则不是一个顺子日期,它一个顺子也没有。小明想知道在整个 2022 年份中,一共有多少个顺子日期?
解题思路:枚举 2022 年所有的日期,然后判断是否存在顺子即可。
本题的顺子为顺序的三位数,包括 012,123,234,345,456,567,678,789。由于是 2022 年的日期,顺子只可能是 012 和 123,其余顺子不可能出现,因为其余均为非法日期。
最终只需枚举月、日,然后 check 一下每个日期中是否存在上述顺子即可。
#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; }
#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 下标0123456 6-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; }
#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; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。