SGU 115 Calendar

SGU_115

    类似这种日期的问题貌似还是写几个小函数处理起来更明了一些。

#include<stdio.h>
#include<string.h>
int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int M = 10, D = 21, W = 7;
int equals(int m, int d, int mm, int dd)
{
if(m < mm)
return -1;
else if(m > mm)
return 1;
if(d < dd)
return -1;
else if(d > dd)
return 1;
return 0;
}
void decrease(int &m, int &d, int &w)
{
if(d == 1)
{
-- m;
d = days[m];
}
else
-- d;
w = (w + 5) % 7 + 1;
}
void increase(int &m, int &d, int &w)
{
if(d == days[m])
++m, d = 1;
else
++ d;
w = w % 7 + 1;
}
int main()
{
int i, j, k, d, m, dd, mm, ww;
while(scanf("%d%d", &d, &m) == 2)
{
if(m < 1 || m > 12 || d < 1 || d > days[m])
printf("Impossible\n");
else
{
mm = M, dd = D, ww = W;
if(equals(mm, dd, m, d) <= 0)
for(; equals(mm, dd, m, d); increase(mm, dd, ww));
else
for(; equals(mm, dd, m, d); decrease(mm, dd, ww));
printf("%d\n", ww);
}
}
return 0;
}


原文地址:https://www.cnblogs.com/staginner/p/2382462.html