#include <fstream>
#include <iostream>
using namespace std;
bool isCorrect(int day, int month, int *dates)
{
if (month < 0 || month > 11)
return false;
if (day < 0 || day > dates[month]-1)
return false;
return true;
}
int main()
{
int dates[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
bool wins[31][12];
int day = 0;
int month = 0;
ifstream in("dategame.in");
in >> day >> month;
in.close();
for (int i = 11; i >= 0; --i)
for (int j = dates[i]-1; j >= 0; --j)
if (j != 30 || month != 11)
{
wins[j][i] = false;
if (isCorrect(j+1, i, dates))
if (!wins[j+1][i])
wins[j][i] = true;
if (isCorrect(j+2, i, dates))
if (!wins[j+2][i])
wins[j][i] = true;
if (isCorrect(j, i+1, dates))
if (!wins[j][i+1])
wins[j][i] = true;
if (isCorrect(j, i+2, dates))
if (!wins[j][i+2])
wins[j][i] = true;
}
/* for (int i = 0; i < 12; ++i)
{
for (int j = 0; j < dates[i]; ++j)
{
cout << (wins[j][i] ? 1 : 2) << (day == j+1 && month == i+1 ? "<" : " ");
}
cout << endl;
} */
ofstream out("dategame.out");
if (wins[day-1][month-1])
out << 1 << endl;
else
out << 2 << endl;
out.close();
return 0;
}
Комментарии
// Есть алгоритм по-круче, банально, но работает! проверь!
// Каюсь, не знал про iostream тогда=)
#include
#include
bool baddate(int,int);
bool Winner(int,int);
void main()
{
FILE *stream;
if ((stream=freopen("dategame.in", "r", stdin)) == NULL)
{
printf("File 'dategame.in' can not be open.\n");
exit(1);
}
int day=1, month=1;
scanf("%d %d",&day,&month);
fclose(stream);
if (baddate(day,month) == true)
{
puts("Wrong date");
return;
}
if ((stream=freopen("dategame.out", "w", stdout)) == NULL)
{
printf("File 'dategame.out' can not be open.\n");
exit(1);
}
printf("\nPlayer #%d will win!",(1+Winner(day,month)));
fclose(stream);
}
bool baddate(int day, int month)
{
if ((day*month < 1)|| // Число или Месяц < 1
(month>12)|| // Месяц > 12
(day>31)|| // Число > 31
(day>30)&&(((month%7)%2) == 0)|| // Число > 30 в некоторые месяцы
((month==2)&&(day==30))|| // 30 Февраля
((month==12)&&(day==31)))
return true;
else return false;
}
bool Winner(int day, int month)
{
if (((day%3 == 0) && (month%2 == 0))||
((day%3 != 0) && (month%2 != 0)))
return true;
else return false;
}