Problem 19: Sonntage zählen

Gesucht wird die Anzahl von Sonntagen, die auf den ersten eines Monats fallen, im Zeitraum des gesamten 20. Jahrhunderts! [ das englische Original ]

Zur Lösung dieses Problem waren einige Informationen gegeben. Zum Beispiel war bekannt, dass der 1. Januar 1900 ein Montag war. Ausgehend von diesem Startpunkt läuft meine Lösung nun über alle Tage eines Jahres und ändert dabei kontinuierlich den Wochentag. Ab dem 1. Januar 1901 werden dann die Sonntage gezählt, die auf den ersten eines Monats fallen:

@Override
public String solve() {

   int weekday = 0; // Monday
   int day = 1; // 1st
   int month = 1; // January
   int year = 1900;

   int cnt = 0;

   while( year < 2001 ) {
      if( day == 1 && weekday == 6 ) {
         if( year > 1900 ) {
            cnt++;
            IO.debugln( "found sunday @ " + day + "-" + month + "-" + year );
         }
      }

      weekday += ( weekday == 6 ) ? -6 : 1;

      day++;
      if( day > DaysInMonth[ month-1 ] ) {
         day = 1;
         month++;
         if( month == 2 ) { // February
            if( year % 4 == 0 )
               if( year % 100 == 0 )
                  if( year % 400 == 0 )
                     DaysInMonth[ month-1 ] = 29;
                  else
                     DaysInMonth[ month-1 ] = 28;
               else
                  DaysInMonth[ month-1 ] = 29;
            else
               DaysInMonth[ month-1 ] = 28;
         }
         if( month > 12 ) {
            month = 1;
            year++;
         }
      }
   }

   return IO.i2s( cnt );
}

Den vollständigen Quellcode der Klasse für die Lösung des Problems 19 kann man sich hier anschauen!

<< Problem 18 Übersicht Problem 20 >>

Kommentar verfassen

Willkommen in Nico Dannebergs Netzwerk

%d Bloggern gefällt das: