题解 | #[NOIP2016]回文日期#

[NOIP2016]回文日期

https://ac.nowcoder.com/acm/problem/16438

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
bool res(int y,int m,int d){
    string a;
    if(m<=9){
        if(d<=9){
           a=to_string(y)+"0"+to_string(m)+"0"+to_string(d);
        }
        else  a=to_string(y)+"0"+to_string(m)+to_string(d);
    }
    else{
         if(d<=9){
            a=to_string(y)+to_string(m)+"0"+to_string(d);
        }
        else  a=to_string(y)+to_string(m)+to_string(d);
    }
    string b=a;
    reverse(a.begin(),a.end());
  if(b==a){
      
     return true;
      
  }
    else return false;
}
bool isr(int y){
    if(y%400==0) return true;
    else if(y%4==0&&y%100!=0) return true;
    else return false;
} 
int main(){
  string first,last;
  cin>>first>>last;
  int year1=stoi(first.substr(0,4));
  int year2=stoi(last.substr(0,4));
  int month1=stoi(first.substr(4,2));
  int month2=stoi(last.substr(4,2));
  int day1=stoi(first.substr(6,2));
  int day2=stoi(last.substr(6,2)); 
  int count=0;
  for(int i=year1;i<=year2;i++){
      int j=1;
      if(i==year1) j=month1;
      for(j;j<=12;j++){
          int day;
          if(i==year2&&j>month2) break; 
          if(j==1||j==3||j==5||j==7||j==8||j==10||j==12) day=31;
          else if(j==2&&isr(i)) day=29;
          else if(j==2&&!isr(i)) day=28;
          else day=30;
          int k=1;
          if(i==year1&&j==month1) k=day1;
          for(k;k<=day;k++){
              if(i==year2&&j==month2&&k>day2) break;
             if(res(i,j,k)) count++;
               
          }
      }
  }
  cout<<count;
}
这道题我是用字符串模拟的,难度还行,一些基础语法与循环条件一开始很难想到,然后看了大佬题解才发现不用这么麻烦。。。
全部评论

相关推荐

不会做题的小熊:我感觉我就算是找不到工作,我也不会作弊进去,作弊进去感觉一方面是自己不踏实,其次就是都靠作弊了,那后面肯定工作的心态是不一样的,没有一种内驱力。
点赞 评论 收藏
分享
头像
01-29 18:11
海南大学 Java
奔跑的suechil...:单从项目看这个简历不怕被问穿吗 带微服务的项目需要相当多的项目理解和经验诶
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务