Entries

スポンサーサイト (この記事を編集する[管理者用])

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://rsujskf.blog32.fc2.com/tb.php/2280-25fbba2b
この記事にトラックバックする(FC2ブログユーザー)

ARC 002 B - 割り切れる日付 (この記事を編集する[管理者用])

Source

AtCoder Regular Contest #002
問題文

問題概要

Y年M月D日を含め,それ以降で,Y/M/Dが整数となる最初の日を求める問題.
Yは1000以上2999以下.

解法

1日ずつ進めながら条件を満たす日を探す.
1月1日は条件を必ず満たすので,365日程度探せば必ず見つかる.

Cによるスパゲッティなソースコード
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define REP(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)

int isLeapYear(int y){if(y%400==0)return 1;if(y%100==0)return 0; if(y%4==0)return 1; return 0;}
int numberOfDaysInMonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char *nameDayOfWeek[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
void nextDay(int *year,int *month,int *day){
  if((*day) < numberOfDaysInMonth[*month] || ((*month)==2 && isLeapYear(*year) && (*day)==28)){
    (*day)++; return;
  }
  (*day)=1; if((*month)==12) (*year)++, (*month)=1; else (*month)++;
}

int main(){
  int y, m, d;

  scanf(" %d/%d/%d",&y,&m,&d);
  for(;;){
    if(y%(m*d)==0) break;
    nextDay(&y,&m,&d);
  }

  printf("%d/%02d/%02d\n",y,m,d);

  return 0;
}

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://rsujskf.blog32.fc2.com/tb.php/2280-25fbba2b
この記事にトラックバックする(FC2ブログユーザー)

Appendix

Recent Articles

ブログ内検索

Ads


(プライバシーポリシー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。