首页 > 代码库 > 寝室扫地问题(swust oj 0509)
寝室扫地问题(swust oj 0509)
题目描述: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 else16 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 else34 {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 else50 {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 else60 printf("P\n");61 }62 }63 return 0;64 }
寝室扫地问题(swust oj 0509)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。