码迷,mamicode.com
首页 > 其他好文 > 详细

寝室扫地问题(swust oj 0509)

时间:2015-01-08 19:45:48      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:

题目描述: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 }

 

寝室扫地问题(swust oj 0509)

标签:

原文地址:http://www.cnblogs.com/yanglingwell/p/4211640.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!