Codeup cementerio - Problema B: Día de la semana

título Descripción

Ahora utilizamos el estilo gregoriano de las citas en Rusia. Los años bisiestos son años con número divisible por 4, pero no es divisible por 100, o divisible por 400.
Por ejemplo, años 2004, 2180 y 2400 son salto. Años 2004, 2181 y 2300 no son bisiestos.
Su tarea es escribir un programa que calcule el día de la semana correspondiente a una fecha determinada en el pasado cercano o en el futuro mediante el acuerdo de hoy acerca de las citas.

entrada

Hay una sola línea contiene el número de días d, nombre del mes M y el número de año y (1000≤y≤3000). El nombre del mes es el correspondiente nombre de Inglés a partir de la letra mayúscula.

exportación

Salida de una sola línea con el nombre Inglés del día de la semana correspondiente a la fecha, a partir de la letra mayúscula. Todas las otras letras deben estar en minúsculas.

entrada de la muestra

21 de de diciembre de 2012
5 de enero de 2013

Ejemplo de salida

viernes
sábado
#include <stdio.h>
#include <string.h>
int mmonth[13][2]= {{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};
char date[10][20] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int isLeapyear(int year)   //判断是否是闰年
{
    if((year%4==0&&year%100!=0)||(year%400==0))
        return 1;
    else
        return 0;
}
int _month(char m[])
{
    char M[14][15]= {"", "January","February","March","April","May","June","July","August","September","October","November","December"};
    int i;
    for(i=1; i<13; i++)
        if(strcmp(m,M[i])==0)
            break;
    return i;
}
int main()
{
    int day,year;
    char m[20];
    while(scanf("%d %s %d",&day,m,&year)!=EOF)
    {
        int flag=0;
        int d1=31,m1=8,y1=2018;  //2018-8-31是周五
        int month=_month(m);
        int time1=0,time2=0;
        time1+=year*10000+month*100+day;
        time2+=y1*10000+m1*100+d1;
        if(time1>time2)   //如果第一个年份大于第二个年份,则交换
        {
            flag=1;  //flag标识两个日期是否交换
            int tmp;
            tmp=year;
            year=y1;
            y1=tmp;
            tmp=month;
            month=m1;
            m1=tmp;
            tmp=day;
            day=d1;
            d1=tmp;
        }
        int count=0;
        while(year<y1||month<m1||day<d1)  //日期一直执行加1操作,直到年月日均相同
        {
            day++;   //执行天数加1
            if(day==mmonth[month][isLeapyear(year)]+1) //判断日是否等于当年月份最后一天
            {
                month++;
                day=1;
            }
            if(month==13)   //月份是否满12个月
            {
                year++;
                month=1;
            }
            count++;   //统计相差结果
        }
        count%=7;
        int result;   //result计算周几
        if(flag==1)
            result=(count+5)%7;
        else
            result=(12-count)%7;
        printf("%s\n",date[result]);
    }
    return 0;
}

El resultado:

Publicados 462 artículos originales · ganado elogios 55 · vistas 320 000 +

Supongo que te gusta

Origin blog.csdn.net/LY_624/article/details/88805540
Recomendado
Clasificación