zoukankan      html  css  js  c++  java
  • HDU-4515 小Q系列故事——世界上最遥远的距离

    小Q系列故事——世界上最遥远的距离

    Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 1399    Accepted Submission(s): 501

    Problem Description
      世界上最遥远的距离   不是生与死   而是我就站在你面前   你却不知道我爱你
      世界上最遥远的距离   不是我就站在你面前你却不知道我爱你   而是明明知道彼此相爱   却不能在一起
      世界上最遥远的距离   不是明明知道彼此相爱却不能在一起   而是相约好了私奔的时间   我穿越到了未来 你却回去了古代
        ——摘自《小Q失恋日记 》第117卷513页
      当小Q使出浑身解数,终于赢得HR女神芳心的时候,却出现了一个意外情况,那就是白富美HR的妈妈并不同意他们交往,当听说小Q只是一个码农,特别是听说小Q曾经参加过资本主义国家发起的SM/ICPC比赛的时候,更是坚决反对!   爱情是伟大的,但是得不到亲人祝福的爱情却备受折磨,小Q和HR相约在腾讯第二届编程马拉松大赛进行到第5天的时候(即2013年3月24日),一起“向前穿越D天,然后开启幸福新生活”。   其勇气可谓令人赞叹,但可怜的小Q却总是备受折磨——小Q理解的”向前穿越”是朝着未来的方向,而女友HR理解的“向前穿越”却是朝着古代的方向!   假设已知现在的日期和穿越的天数D,你能计算出小Q和女友各自到达的年代吗?
     
    Input
      输入首先包含一个整数N,表示有N组测试用例;   接下来N行是N组数据,每一行包含一个正整数D(D<=10,0000),D表示向前穿越的天数。
     
    Output
      请计算并输出小Q和女友分别到达的日期,日期格式为YYYY/MM/DD,两个日期中间用一个空格隔开,每组数据占一行,具体输出格式请参见样例。
     
    Sample Input
    2
    6
    30
     
    Sample Output
    2013/03/30 2013/03/18
    2013/04/23 2013/02/22
     
    Source
     
    Recommend
    liuyiding
      1 #include<stdio.h>
      2 int a[]={31,28,31,30,31,30,31,31,30,31,30,31};
      3 int leap(int n)
      4 {
      5     if((n%4==0&&n%100!=0)||n%400==0)
      6         return 1;
      7     else
      8         return 0;
      9 }
     10 int main()
     11 {   
     12     int t,yy,mm,dd,d,x,yy1,g,yy2,p,f;
     13         scanf("%d",&t);
     14      while(t--)
     15      { 
     16          scanf("%d",&d);
     17           yy=2013;mm=3;dd=24;yy1=2013;yy2=2013;
     18           x=d+83;
     19          while(1)//判断该年是为闰年还是平年,等到日子小于一年结束循环。while(1)可算一个技巧。
     20          {
     21              if(leap(yy1))
     22              {
     23                  if(x<=366)
     24                  {
     25                       break;
     26                  }
     27                  else
     28                  {
     29                      yy1++;
     30                      x-=366;
     31                  }
     32              }
     33              else
     34              {
     35                  if(x<=365)
     36                  {
     37                      break;
     38                  }
     39                  else
     40                  {
     41                      yy1++;
     42                      x-=365;
     43                  }
     44              }
     45          }
     46            g=0;
     47          if(leap(yy1))
     48              a[1]=29;//闰年就定义a【1】为29。
     49           while(x>a[g])
     50          {
     51              x-=a[g];
     52              g++;
     53          }//g代表月x就代表天。
     54               a[1]=28;//把a【1】要还原,不要丢,要注意细节。
     55          printf("%04d/%02d/%02d ",yy1,g+1,x);
     56          if(d<83)//前面的计算完。
     57          {
     58              if(d<24)
     59                printf("2013/03/%d
    ",24-d);
     60              else if(d<52)
     61                printf("2013/02/%d
    ",52-d);
     62              else
     63                printf("2013/01/%d
    ",83-d);
     64          }
     65          else
     66          {
     67              p=d-82;
     68              yy2--;//少了一年,就要减掉。
     69              while(1)
     70              {
     71                  if(leap(yy2))
     72                  {
     73                      if(p<=366)
     74                      {
     75                          break;
     76                      }
     77                      else
     78                      {
     79                          p-=366;
     80                          yy2--;
     81                      }
     82                  }
     83                  else
     84                  {
     85                      if(p<=365)
     86                      {
     87                         
     88                          break;
     89                      }
     90                      else
     91                      {
     92                          p-=365;
     93                          yy2--;
     94                      }
     95                  }
     96              }
     97              f=11;//倒着从后面算起,注意从12月开始后退。
     98             if(leap(yy2))
     99                 a[1]=29;
    100             while(p>a[f])
    101             {
    102                 p-=a[f];
    103                 f--;
    104             }
    105             a[1]=28;
    106             printf("%04d/%02d/%02d
    ",yy2,f+1,a[f]-p+1);//注意加1.
    107          }
    108      }
    109      return 0;
    110 }
     
     
  • 相关阅读:
    POJ 1258 Agri-Net (prim水题)
    POJ 1258 Agri-Net (prim水题)
    Call to your teacher
    Call to your teacher
    Redis 笔记与总结8 PHP + Redis 信息管理系统(分页+好友关注)
    用R语言求置信区间
    用R语言求置信区间
    竞品分析报告正确的打开方式
    竞品分析报告正确的打开方式
    内容分析在用户反馈分析中的应用
  • 原文地址:https://www.cnblogs.com/cancangood/p/3259789.html
Copyright © 2011-2022 走看看