#include <iostream>
using namespace std;
int getWeekDay(int year, int month, int day)
{
int weekday;
for(;month<=0||month>12;)
{
if(month<=0)
{
year-=1;
month+=12;
}
else if(month>12)
{
year+=1;
month-=12;
}
}
weekday=year>0?(5+(year+1)+(year-1)/4-(year-1)/100+(year-1)/400)%7: (5+year+year/4-year/100+year/400)%7;
weekday=month>2?(weekday+2*(month+1)+3*(month+1)/5)%7: (weekday+2*(month+2)+3*(month+2)/5)%7;
if(((year%4==0&&year%100!=0)||year%400==0)&&month>2)
{
weekday=(weekday+1)%7;
}
weekday=(weekday+day)%7;
return weekday;
}
int main(){
int sy,smonth,sd,sh,sm,ss;
int ey,emonth,ed,eh,em,es;
float totalsecond;
float totalminiute;
float cost;
int day;
while(true){
cout<<"请输入开始年月日时分秒,每个元素以回车结束"<<endl;
cin>>sy>>smonth>>sd>>sh>>sm>>ss;
if(sy<1912||sy>2112){
cout<<"输入年份错误,范围为1912<=year<=2112,请重输入年份"<<endl;
cin>>sy;
}
if(smonth<1||smonth>12){
cout<<"输入月份错误,范围为1<=month<=12,请重输入月份"<<endl;
cin>>smonth;
}
if(sd<1||sd>31){
cout<<"输入日错误,范围为1<=day<=31,请重输入日"<<endl;
cin>>sd;
}
if(sh<0||sh>24){
cout<<"输入小时错误,范围为0<=hour<=24,请重输入小时"<<endl;
cin>>sh;
}
if(sm<0||sm>60){
cout<<"输入分钟错误,范围为0<=minute<=60,请重输入分钟"<<endl;
cin>>sm;
}
cout<<"请输入结束年月日时分秒,每个元素以回车结束"<<endl;
cin>>ey>>emonth>>ed>>eh>>em>>es;
if(ey<1912||ey>2112){
cout<<"输入年份错误,范围为1912<=year<=2112,请重输入年份"<<endl;
cin>>ey;
}
if(emonth<1||emonth>12){
cout<<"输入月份错误,范围为1<=month<=12,请重输入月份"<<endl;
cin>>emonth;
}
if(ed<1||ed>31){
cout<<"输入日错误,范围为1<=day<=31,请重输入日"<<endl;
cin>>ed;
}
if(eh<0||eh>24){
cout<<"输入小时错误,范围为0<=hour<=24,请重输入小时"<<endl;
cin>>eh;
}
if(em<0||em>60){
cout<<"输入分钟错误,范围为0<=minute<=60,请重输入分钟"<<endl;
cin>>em;
}
/*
*计算三月末四月初的周日
*
*/
int i;
for(i = 0; i < 10; i++){
if(getWeekDay(sy,3,26+i)==0){
if(i == 0 || i == 1)
continue;
else break;
}
}
int j;
for(j = 7; j > 0; j --){
if(getWeekDay(sy,10,31-j)==0)
break;
}
if(ed > sd)
totalsecond = 24*60*60-(sh*60*60+sm*60+ss)+eh*60*60+em*60+es;
else totalsecond = (eh*60*60+em*60+es)-(sh*60*60+sm*60+ss);
totalminiute = totalsecond/60;
if(smonth == 3 && sd == 26 + i && sh < 2 && eh >= 3)
totalminiute -= 60;
if(smonth == 10 && sd == 31 - j && sh < 3)
totalminiute += 60;
if(totalminiute <= 20)
cost = 0.05 * totalminiute;
else
cost = 1 + (totalminiute-20)*0.1;
cout <<"总花费为"<<cost<<endl;
}
}
using namespace std;
int getWeekDay(int year, int month, int day)
{
int weekday;
for(;month<=0||month>12;)
{
if(month<=0)
{
year-=1;
month+=12;
}
else if(month>12)
{
year+=1;
month-=12;
}
}
weekday=year>0?(5+(year+1)+(year-1)/4-(year-1)/100+(year-1)/400)%7: (5+year+year/4-year/100+year/400)%7;
weekday=month>2?(weekday+2*(month+1)+3*(month+1)/5)%7: (weekday+2*(month+2)+3*(month+2)/5)%7;
if(((year%4==0&&year%100!=0)||year%400==0)&&month>2)
{
weekday=(weekday+1)%7;
}
weekday=(weekday+day)%7;
return weekday;
}
int main(){
int sy,smonth,sd,sh,sm,ss;
int ey,emonth,ed,eh,em,es;
float totalsecond;
float totalminiute;
float cost;
int day;
while(true){
cout<<"请输入开始年月日时分秒,每个元素以回车结束"<<endl;
cin>>sy>>smonth>>sd>>sh>>sm>>ss;
if(sy<1912||sy>2112){
cout<<"输入年份错误,范围为1912<=year<=2112,请重输入年份"<<endl;
cin>>sy;
}
if(smonth<1||smonth>12){
cout<<"输入月份错误,范围为1<=month<=12,请重输入月份"<<endl;
cin>>smonth;
}
if(sd<1||sd>31){
cout<<"输入日错误,范围为1<=day<=31,请重输入日"<<endl;
cin>>sd;
}
if(sh<0||sh>24){
cout<<"输入小时错误,范围为0<=hour<=24,请重输入小时"<<endl;
cin>>sh;
}
if(sm<0||sm>60){
cout<<"输入分钟错误,范围为0<=minute<=60,请重输入分钟"<<endl;
cin>>sm;
}
cout<<"请输入结束年月日时分秒,每个元素以回车结束"<<endl;
cin>>ey>>emonth>>ed>>eh>>em>>es;
if(ey<1912||ey>2112){
cout<<"输入年份错误,范围为1912<=year<=2112,请重输入年份"<<endl;
cin>>ey;
}
if(emonth<1||emonth>12){
cout<<"输入月份错误,范围为1<=month<=12,请重输入月份"<<endl;
cin>>emonth;
}
if(ed<1||ed>31){
cout<<"输入日错误,范围为1<=day<=31,请重输入日"<<endl;
cin>>ed;
}
if(eh<0||eh>24){
cout<<"输入小时错误,范围为0<=hour<=24,请重输入小时"<<endl;
cin>>eh;
}
if(em<0||em>60){
cout<<"输入分钟错误,范围为0<=minute<=60,请重输入分钟"<<endl;
cin>>em;
}
/*
*计算三月末四月初的周日
*
*/
int i;
for(i = 0; i < 10; i++){
if(getWeekDay(sy,3,26+i)==0){
if(i == 0 || i == 1)
continue;
else break;
}
}
int j;
for(j = 7; j > 0; j --){
if(getWeekDay(sy,10,31-j)==0)
break;
}
if(ed > sd)
totalsecond = 24*60*60-(sh*60*60+sm*60+ss)+eh*60*60+em*60+es;
else totalsecond = (eh*60*60+em*60+es)-(sh*60*60+sm*60+ss);
totalminiute = totalsecond/60;
if(smonth == 3 && sd == 26 + i && sh < 2 && eh >= 3)
totalminiute -= 60;
if(smonth == 10 && sd == 31 - j && sh < 3)
totalminiute += 60;
if(totalminiute <= 20)
cost = 0.05 * totalminiute;
else
cost = 1 + (totalminiute-20)*0.1;
cout <<"总花费为"<<cost<<endl;
}
}