| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2075 人关注过本帖
标题:输出从公元y1年到公元y2年间的每年的a月的第b个星期c的日期。
只看楼主 加入收藏
原以为
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2015-10-15
结帖率:60%
收藏
已结贴  问题点数:5 回复次数:4 
输出从公元y1年到公元y2年间的每年的a月的第b个星期c的日期。
问题描述

  有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形式定下来的,比如说母亲节就定为每年的五月的第二个星期日。
   现在,给你a,b,c和y1, y2(1850 ≤ y1, y2 ≤ 2050),希望你输出从公元y1年到公元y2年间的每年的a月的第b个星期c的日期。
   提示:关于闰年的规则:年份是400的整数倍时是闰年,否则年份是4的倍数并且不是100的倍数时是闰年,其他年份都不是闰年。例如1900年就不是闰年,而2000年是闰年。
   为了方便你推算,已知1850年1月1日是星期二。

输入格式

  输入包含恰好一行,有五个整数a, b, c, y1, y2。其中c=1, 2, ……, 6, 7分别表示星期一、二、……、六、日。

输出格式

  对于y1和y2之间的每一个年份,包括y1和y2,按照年份从小到大的顺序。
   如果该年的a月第b个星期c确实存在,则以"yyyy/mm/dd"的格式输出,即输出四位数的年份,两位数的月份,两位数的日期,中间用斜杠“/”分隔,位数不足时前补零。
   如果该年的a月第b个星期c并不存在,则输出"none"(不包含双引号)。

样例输入

5 2 7 2014 2015

样例输出

2014/05/11
 2015/05/10

评测用例规模与约定

  所有评测用例都满足:1 ≤ a ≤ 12,1 ≤ b ≤ 5,1 ≤ c ≤ 7,1850 ≤ y1, y2 ≤ 2050。



我的代码,大神检查检查。能运行出结果,可系统评测只给40分
程序代码:
#include<stdio.h>
int main()
{
    int y1,y2,m,n,w,i,j,p,q,s,start,flag=0,a[12]={31,29,31,30,31,30,31,31,30,31,30,31},
        b[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    scanf("%d %d %d %d %d",&m,&n,&w,&y1,&y2);
loop: s=0;
      if(y1==1850) 
      {
          for(i=0;i<m-1;i++)
              s=s+a[i];    
      }
      else
      {
          for(i=1850;i<y1;i++)                        /*计算1850年—Y1前一年的相隔天数*/
          {
              if((i%400==0)||((i%4==0)&&(i%100!=0)))        
                  s=s+366;                                                /*闰年*/        
              else
                  s=s+365;                                             /*平年*/
          }
          
          if((i%400==0)||((i%4==0)&&(i%100!=0)))    
          {
              q=1;                                             /*闰年*/
              for(j=0;j<m-1;j++)
                  s=s+a[j];
          }
          else
          {
              q=0;                                             /*平年*/
              for(j=0;j<m-1;j++)
                  s=s+b[j];
          }
      }
      start=(s+2)%7;                                        /*y1年m月的第一天是星期start*/
      
      
      if(start==w)   flag=0;                                 /*第一个星期W距离本月第一天星期start的天数*/
      if(start<w)  flag=w-start;                           

      if(start>w)     flag=7-(start-w);                   
      p=flag+1+(n-1)*7;                            /*第n个星期W距离本月第一天星期start的天数*/

      if((q==1)&&(m==2)&&(p>29))                         /* 不存在具体日期的情况*/
                                                                   /*闰年2月不多于29天*/
          printf("none\n");
      else
          if ((q==0)&&(m==2)&&(p>28))                             /*平年2月不多于28天*/
              printf("none\n");
          else 
              if (((m==4)||(m==6)||(m==9)||(m==11))&&(p>30))        /*4,6,9,10,11月不多于30天*/
                  printf("none\n");
              else                            /*1 3 5 7 8 10 12月不多于31天*/
                  
                  if(((m==1)||(m==3)||(m==5)||(m==7)||(m==8)||(m==10)||(m==12))&&(p>31))
                      printf("none\n");
                  else 
                      printf("%d/%02d/%02d\n",y1,m,p);                  /*存在具体日期的输出结果*/
                  if(y1<y2)
                  {
                      ++y1;
                      goto  loop;                                         /*继续判断下一年*/
                  }
                  else goto end;
end:    return(0);
} 
2016-04-08 17:37
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:5 
是不是有y1大于y2的情况?
2016-04-08 17:58
原以为
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2015-10-15
收藏
得分:0 
好的,我试试。
2016-04-08 18:32
原以为
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2015-10-15
收藏
得分:0 
回复 2楼 grmmylbs
好的,我试试。   
2016-04-08 18:32
原以为
Rank: 2
等 级:论坛游民
帖 子:33
专家分:12
注 册:2015-10-15
收藏
得分:0 
回复 2楼 grmmylbs
不是因为这个。
2016-04-08 18:38
快速回复:输出从公元y1年到公元y2年间的每年的a月的第b个星期c的日期。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021409 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved