2017-10-20 10 views
1

Ceci est pour le projet Euler 19. J'ai à peu près figuré le code, mais ma sortie est +1 pour une raison quelconque.Euler 19 Sortie

#include <stdio.h> 

#define SIZE 12 

    int main(void) 
    { 
      int year; 
      int month; 
      int daysinmonths[SIZE] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 
      int currentday = 365; /* Account for 1900 */ 
      int sundaycount = 0; 

     for (year = 1901; year <= 2000; year++) { 
       if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { 
         daysinmonths[1] = 29; 
       } 
       for (month = 0; month < SIZE; month++) { 
         if (currentday % 7 == 0) 
           sundaycount++; 
         currentday += daysinmonths[month]; 
       } 
     } 
     printf("%d Sundays as the first of a month from 1901 to 2000 \n", sundaycount); 
    } 
+0

Ce serait bien si vous avez décrit ce que Euler 19 est, pour sauver tout le monde une recherche. Aussi, que signifie "ma sortie est +1"? –

+0

La sortie est supposée être 171, mais j'ai obtenu 172, donc +1. Euler 19 nous demande de trouver combien de dimanches sont les premiers du mois de 1901 à 2000. – kamisama

+3

La première fois que vous rencontrez une année bissextile, vous définissez le nombre de jours de février à 29. Où la réglez-vous sur 28? –

Répondre

0
#include <stdio.h> 

#define SIZE 12 

    int main(void) 
    { 
      int year; 
      int month; 
      int daysinmonths[SIZE] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 
      int currentday = 366; /* Account for 1900 */ 
      int sundaycount = 0; 

     for (year = 1901; year <= 2000; year++) { 
       if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { 
         daysinmonths[1] = 29; 
       } 
       else{ 
        daysinmonths[1] = 28; 
       } 
       for (month = 0; month < SIZE; month++) { 
         if (currentday % 7 == 0){ 
           sundaycount++; 
         } 
         currentday += daysinmonths[month]; 
       } 
     } 
     printf("%d Sundays as the first of a month from 1901 to 2000 \n", sundaycount); 
    } 
+1

Merci! Cela a réglé le problème. Il semble que je devrais attribuer le premier jour à 366. – kamisama

+0

ok.votre bienvenue –

+0

Je pense que c'est vrai. 1900 n'était * pas * une année bissextile, mais le 1er janvier 1900 était un lundi, pas un dimanche. C'est à dire. Le 31 décembre 1899 était un dimanche. Ajoutez 365 à cela et vous avez le 31 décembre 1900. Ajoutez 366 à cela et vous avez le 1er janvier 1901 comme vous le souhaitez. –