华为实习笔试2018.4.18(二)

二、13号又恰好是星期五真的很特殊吗?也就是说,13号出现在星期五的几率比出现在其它周日的几率大吗?要回答这个问题。
写一个程序计算13日出现在某个星期的次数(在给定的N年时间中)。这个时间段为1900年1月1日到1900+N-1年12月31日。
N为非负整数,不超过400.(1900年1月1日是星期一)

输入描述:
1 0
第一个参数为years,表示距离1900年1月1日的年数
第二个参数为weeks,表示星期数(分别用0——6代表星期日到星期六)

输出描述:
13日出现在星期数为weeks的次数,若异常失败输出为-1

输入
1 0
输出

1

(通过率62.5%)

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
using namespace std;
int main()
{
int year,weeks,i,j=0;
int a[13]={0,12,43,71,102,132,163,193,224,255,285,316,346};
int b[13]={0,12,43,72,103,133,164,194,225,256,286,317,347};
    cin >> year >>  weeks;
    if(year > 400 || year <=0 || weeks <0 || weeks > 6) { cout << "-1" <<endl; return 0;}
for(i=1;i<12;i++)
{
    if(year % 4 != 0 || (year % 100 == 0 && year % 400 != 0 ))
    {
    for(i=1;i<12;i++)
    {
    if((365*year+year/4-year/100+year/400+a[i])%7==weeks)
    j++;
    }
}else
    {
    for(i=1;i<12;i++)
    {
    if((365*year+year/4-year/100+year/400+b[i])%7==weeks)
    j++;
    }
    }
}
    if(j==0)
    {
    cout << "-1" <<endl;
    }else
    {
    cout << j <<endl;
    }
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值