算法提高 日期计算c语言,蓝桥杯 ADV-127 算法提高 日期计算

#include

using namespace std;

int isleapyear(int year);

int days(int year, int month, int day);

int distance(int year, int month, int day);

int main() {

int year, month, day;

cin >> year >> month >> day;

int distance1 = distance(year, month, day);

if (year >= 2012) {

switch(distance1) {

case 0: cout << 6; break;

case 1: cout << 7; break;

case 2: cout << 1; break;

case 3: cout << 2; break;

case 4: cout << 3; break;

case 5: cout << 4; break;

case 6: cout << 5; break;

}

} else {

switch(distance1) {

case 0: cout << 6; break;

case 1: cout << 5; break;

case 2: cout << 4; break;

case 3: cout << 3; break;

case 4: cout << 2; break;

case 5: cout << 1; break;

case 6: cout << 7; break;

}

}

return 0;

}

int isleapyear(int year) {

if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)

return 1;

else

return 0;

}

int days(int year, int month, int day) {

int sum = 0;

if (month <= 2) {

if (month == 1)

sum = day;

else

sum = 31 + day;

} else {

switch(month) {

case 3: sum = 59 + day; break;

case 4: sum = 90 + day; break;

case 5: sum = 120 + day; break;

case 6: sum = 151 + day; break;

case 7: sum = 181 + day; break;

case 8: sum = 212 + day; break;

case 9: sum = 243 + day; break;

case 10: sum = 273 + day; break;

case 11: sum = 304 + day; break;

case 12: sum = 334 + day; break;

}

if(isleapyear(year) == 1) {

sum = sum + 1;

}

}

return sum;

}

int distance(int year, int month, int day) {

int count = 0;

int distance1 = 0;

if(year >=2012) {

distance1 = 365 * (year - 2012) + days(year, month, day);

for (int i = 2012; i < year; i++) {

if(isleapyear(i) == 1)

count++;

}

distance1 = distance1 + count;

} else {

distance1 = 365 * (2011 - year) + 365 - days(year, month, day);

if (isleapyear(year) == 1)

distance1 = distance1 + 1;

for (int i = year + 1; i <= 2011; i++) {

if(isleapyear(i) == 1)

count++;

}

distance1 = distance1 + count;

}

distance1 = distance1 % 7;

return distance1;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值