标签:
题目描述:http://acm.swust.edu.cn/problem/0509/
解题思路:主要是由于在写计算是否闰年的时候,想到了个巧妙地方法:
int is_leap(int x)//判断是否闰年 { return !(x%4&&x%400); }
以及对于
if(x>a) sum=b+1; else sum=b;
有了改进的方法:
sum=b+(x>a);
AC代码:
1 #include<stdio.h> 2 struct date//记录日期 3 { 4 int year,day,month; 5 }; 6 int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//记录天数 7 int is_leap(int x)//判断是否闰年 8 { 9 return !(x%4&&x%400); 10 } 11 int a_year(int x) 12 { 13 if(x==2007) 14 return (mon[9]+mon[10]+mon[11]+mon[12]); 15 else 16 return is_leap(x)+365; 17 } 18 int minus(struct date x) 19 { 20 int i,ans=0; 21 if(x.year==2007){ 22 for(i=9;i<x.month;i++) 23 ans+=mon[i]; 24 ans+=x.day; 25 return ans; 26 } 27 for(i=2007;i<x.year;i++) 28 ans+=a_year(i); 29 if(x.month==1) 30 ans+=x.day; 31 else if(x.month==2) 32 ans+=(x.day+mon[1]); 33 else 34 { 35 for(i=1;i<x.month;i++) 36 ans+=mon[i]; 37 ans+=(is_leap(x.year)+x.day); 38 } 39 return ans; 40 } 41 int main() 42 { 43 struct date quiz; 44 while(scanf("%d%d%d",&quiz.year,&quiz.month,&quiz.day)!=EOF){ 45 int days=minus(quiz); 46 int a=days%7; 47 if(a==3) 48 printf("ALL\n"); 49 else 50 { 51 int week=days-(days/7)-(a>3); 52 week=week%4; 53 if(week==1) 54 printf("B\n"); 55 else if(week==2) 56 printf("X\n"); 57 else if(week==3) 58 printf("H\n"); 59 else 60 printf("P\n"); 61 } 62 } 63 return 0; 64 }
标签:
原文地址:http://www.cnblogs.com/yanglingwell/p/4211640.html