201503-3 节日

记录一下练习的代码。不想存电脑里了,分享一下我写的渣代码。。。

重点是第几个月的第几个星期几,不是第几周的星期几。。。。哎,要看清楚呀。。。。

代码是稍微长了那么一点,但是从最小的年份到最大的年份一次计算完成,中间用counter计数。
如果每个年份是次数少,可以用函数封装一下,求一个年份调用一次。
如果需要求多个年份,还是用变量保存一下,减少一些重复计算。

试题编号: 201503-3
试题名称: 节日
时间限制: 1.0s
内存限制: 256.0MB

问题描述
  有一类节日的日期并不是固定的,而是以“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。

# include <iostream>
#include <iomanip>
using namespace std;

void findDay(int tempDay,int b,int c,int limit,int i,int j)
{
    int day=1;
    int week=1;
    bool isOk=false;
    while(day<=limit)
    {
        /*
        每月第几周的周几
        if(week==b&&(tempDay+1)%7==(c%7))//tempDay+1 下月第一个星期
        {
            cout<<i<<"/";
            cout<<setfill('0')<<setw(2)<<j;
            cout<<"/";
            cout<<setfill('0')<<setw(2)<<day<<endl;
            isOk=true;
            break;
        }
        tempDay++;
        day++;
        if((tempDay)%7==0&&day>2)
        {
            week++;
        }
        */
        //题目要求的是每月第几个周几   不是第几周!!!!
        if((tempDay+1)%7==(c%7))
        {
            week++;
        }
        if((week-1)==b&&(tempDay+1)%7==(c%7))//tempDay+1 下月第一个星期
        {
            cout<<i<<"/";
            cout<<setfill('0')<<setw(2)<<j;
            cout<<"/";
            cout<<setfill('0')<<setw(2)<<day<<endl;
            isOk=true;
            break;
        }
        tempDay++;
        day++;
    }
    if(!isOk)
    {
        cout<<"none"<<endl;
    }
}

int main()
{
    int a,b,c,y1,y2;
    cin>>a>>b>>c>>y1>>y2;

    int counter=0;
    int startYear=1850;
    int startWeek=2-1;//偏移量
    int tempDay=0;

    for(int i=startYear; i<y1; ++i)
    {
        //闰年
        if(i%400==0||(i%4==0&&i%100!=0))
        {
            counter+=366;
        }//平年
        else
        {
            counter+=365;
        }
    }
    //计算月日
    for(int i=y1; i<=y2; ++i)
    {
        for(int j=1; j<=12; ++j)
        {
            switch(j)
            {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                if(j==a)//如果是当前月则计算星期。
                {
                    tempDay=((counter)%7+startWeek)%7;//一共有几周+起始的星期几 1234567->2345671
                    findDay(tempDay,b,c,31,i,j);
                }
                counter+=31;
                break;
            case 2:
                //闰年
                if(i%400==0||(i%4==0&&i%100!=0))
                {
                    if(j==a)//如果是当前月则计算星期。
                    {
                        tempDay=((counter)%7+startWeek)%7;
                        findDay(tempDay,b,c,29,i,j);
                    }
                    counter+=29;
                }//平年
                else
                {
                    if(j==a)//如果是当前月则计算星期。
                    {
                        tempDay=((counter)%7+startWeek)%7;
                        findDay(tempDay,b,c,28,i,j);
                    }
                    counter+=28;
                }
                break;
            default:
                if(j==a)//如果是当前月则计算星期。
                {
                    tempDay=((counter)%7+startWeek)%7;
                    findDay(tempDay,b,c,30,i,j);
                }
                counter+=30;
                break;
            }
        }
    }
    return 0;
}
Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容