[SOLUCIONADO] Ayuda Contar los domingos

Iniciado por hackmin, Febrero 25, 2015, 01:12:45 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Febrero 25, 2015, 01:12:45 PM Ultima modificación: Febrero 26, 2015, 10:42:04 PM por Expermicid
Se le da la siguiente información, pero puede que prefiera hacer una investigación por sí mismo.

01 de enero 1900 fue un lunes.
Treinta días tiene septiembre,
abril, junio y noviembre.
Todo el resto tiene treinta y uno,
solo ahorro de febrero,
que tiene veintiocho años, llueva o haga sol.
Y en años bisiestos, veintinueve.
Un año bisiesto se produce en cualquier año divisible por 4, pero no en un siglo a menos que sea divisible por 400.
¿Cuántos domingos cayó en el primer día del mes durante el siglo XX (1 enero 1901 a 31 diciembre 2000)?


Mi programa dice que tiene en total  desde el 1 de enero de 1901 hasta el 31 de diciembre 2000, hay en total: 5224 Domingos exactamente, ademas  para ver si es cierto calcule desde 1901 hasta 1904, lo hice hasta 1904 por que el 1904 es bisiesto y yo lo calcule a mano y efectivamente, dio: 209

Se lo puse al profesor la solución y me dijo que no, que es erronea  :-\

Miren el código porfavor y deduzcan:

Código: java
public static void main(String[] args) {

Scanner cin = new Scanner(System.in);
System.out.println("Cual es la base: ");
int Base = cin.nextInt();
int[] Meses = {31,0,31,30,31,30,31,31,30,31,30,31};
int año = 1901;
int e = 0;
int Domingos = 0;
int SumaMeses = 0;
int SumarDias = 0;




   
    for(int i = 1;i <= 7;i++){
   
    if(año > 2000){
    System.out.println(Domingos);
    return;
    }
   
   
    if(i == 1){
   
    if(año % 4 == 0 && año % 100 != 0){
        Meses[1] = 29;
       
        }
        if(año % 4 == 0 && año % 100 == 0){
        Meses[1] = 28;
        }
        if(año % 4 != 0 && año % 400 != 0 ){
        Meses[1]= 28;
        }
   
    }
   
   
    if(i == 7 && SumarDias < SumaMeses){
    Domingos = Domingos + 1;
    SumarDias = SumarDias + i;
    i = 1;
    }
    if(i == 1 && SumarDias == 0)
    {
    for(int x = 0; x <= Meses.length-1;x++){
   
    SumaMeses = Meses[x] + SumaMeses;
   
    }
    }
    if(SumarDias > SumaMeses && SumaMeses < 366){
    Domingos = Domingos - 1;
    }
   
    if(SumarDias > SumaMeses ){
          año = año +  1;
          i = 0;
          SumarDias = 0;
          SumaMeses = 0;
    }
   
   

    }
}
}
   

Febrero 25, 2015, 02:20:42 PM #1 Ultima modificación: Febrero 25, 2015, 02:57:05 PM por 79137913
HOLA!!!

Código: java
import java.util.*;

/** DateDiff -- compute the difference between two dates.
*/
public class DateDiff {
   public static void main(String[] av) {
      /** old date */
      Date d1 = new GregorianCalendar(1900,01,01,23,59).getTime();

      /** newer date */
      Date d2 = new GregorianCalendar(2000,12,31,23,59).getTime();

      // Get msec from each, and subtract.
      long diff = d2.getTime() - d1.getTime();

      System.out.println( (diff / (1000*60*60*24)) + " days.");
   }
}


Si mi calculo  no falla son 36899 dias.

GRACIAS POR LEER!!!
"Algunos creen que soy un bot, puede que tengan razon"
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

*Shadow Scouts Team*                                                No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Febrero 25, 2015, 03:00:02 PM #2 Ultima modificación: Febrero 25, 2015, 03:10:07 PM por hackmin
Mirando y mirando el código, creo y puedo decir con certeza que el fallo posiblemente este aquí:

Código: java
if(SumarDias > SumaMeses && SumaMeses < 366){
    Domingos = Domingos - 1;
    }


El problema es que no se como arreglar esa línea, estoy bloqueado jejeje-
Amigo tu respuesta esta mal: 36899

Esa no es...

Febrero 25, 2015, 03:21:18 PM #3 Ultima modificación: Febrero 25, 2015, 03:23:07 PM por 79137913
HOLA!!!

No suponia ayudarte con tu codigo solo mostrarte una manera mas limpia de sacar la diferencia de dias, 36899 no es la cantidad de domingos, es la cantidad de dias.

No pensabas que iba a hacer tu tarea no?

GRACIAS POR LEER!!!
"Algunos creen que soy un bot, puede que tengan razon"
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

*Shadow Scouts Team*                                                No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
HOLA!!!

No suponia ayudarte con tu codigo solo mostrarte una manera mas limpia de sacar la diferencia de dias, 36899 no es la cantidad de domingos, es la cantidad de dias.

No pensabas que iba a hacer tu tarea no?

GRACIAS POR LEER!!!
En ningun momento te dije que me la hicieras, realmente no quiero, pero mas bien creo que el error de mi código esta en la linea que te dije arriba, simplemente eso amigo, y creo que es eso, ahora lo estoy mirando y si no puedo pues miro ya el código que pusistes arriba

Febrero 26, 2015, 05:16:04 PM #5 Ultima modificación: Febrero 26, 2015, 05:25:04 PM por hackmin
a hice el ejercicio y me dio 171 :D

Se que el código que ponga, estará mal organizado, no podía usar métodos...para los proximos ejercicios intentare hacerlo mejor...

Gracias  por perder minutos de su vida en mi, te estoy agradecido compañero... Bueno espero que no te dañe la vista mi código :D

Tambien te quiero decir que el problema lo entendí mal y era hacer un programa que cuente ¿Cuántos domingos cayó en el primer día del mes durante el siglo XX?

Código: java
[HIGHLIGHT="Java"]public class DomingoFinal {


public static void main(String[] args) {

int[] Meses = {31,28,31,30,31,30,31,31,30,31,30,31};
int[] NombreMeses = {1,2,3,4,5,6,7,8,9,10,11,12};
int año = 1901;
int e = 0;
int A = 0;
int B = 50;
int C = -1;
int D = 6;
int E = 1;
int Resultado = 0;
int Domingos = 0;
String NombreMes = "";


for(int i = 1; i <= 12;i++){



if(i == NombreMeses[0]){
e = e + 1;
NombreMes = "Enero";
D = 6;
}
if(i == NombreMeses[1]){
e = e + 1;
NombreMes = "Febrero";
D = 2;
}
if(i == NombreMeses[2]){
e = e + 1;
NombreMes = "Marzo";
D = 2;
}
if(i == NombreMeses[3]){
e = e + 1;
NombreMes = "Abril";
D = 5;
}
if(i == NombreMeses[4]){
e = e + 1;
NombreMes = "Mayo";
D = 0;
}
if(i == NombreMeses[5]){
e = e + 1;
NombreMes = "Junio";
D = 3;
}
if(i == NombreMeses[6]){
e = e + 1;
NombreMes = "Julio";
D = 5;
}
if(i == NombreMeses[7]){
e = e + 1;
NombreMes = "Agosto";
D = 1;
}
if(i == NombreMeses[8]){
e = e + 1;
NombreMes = "Septiembre";
D = 4;
}
if(i == NombreMeses[9]){
e = e + 1;
NombreMes = "Octubre";
D = 6;
}
if(i == NombreMeses[10]){
e = e + 1;
NombreMes = "Noviembre";
D = 2;
}
if(i == NombreMeses[11]){
e = e + 1;
NombreMes = "Diciembre";
D = 4;
}

//Operaciones Enero
if(NombreMes == "Enero"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}
}

//Operaciones Febrero

if(NombreMes == "Febrero"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}

// Operaciones marzo

if(NombreMes == "Marzo"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}



if(NombreMes == "Abril"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}




if(NombreMes == "Mayo"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}
if(NombreMes == "Junio"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}


if(NombreMes == "Julio"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}



if(NombreMes == "Agosto"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}


if(NombreMes == "Septiembre"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}



if(NombreMes == "Octubre"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}

if(NombreMes == "Noviembre"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}


if(NombreMes == "Diciembre"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}

  if(i == 12 && año >= 1901 && año < 1999){
año = año + 1;
i = 0;
}
         



} // Esto es el for

System.out.println(Domingos);

}

}

[/HIGHLIGHT]