Intput
第一行输入一个正整数T,表示总共有T组册数数据(T <= 200);
对于每组数据依次输入三个数x,y,z,
x表示出生月份和出生日子的最大公约数(1<= x <=1000);
y表示出生月份和出生日子的最小公倍数(1<= y <=1000);
z表示出生年份(1900 <= z <= 2013)。
Output
对于每组数据,先输出Case数。
如果答案不存在 ,输出“-1”;
如果答案存在但不唯一 ,输出“1”;
如果答案唯一,输出生日,日期格式为YYYY/MM/DD;
每组输出占一行,具体输出格式参见样例。
1,注意闰年,wa两次
2,注意多组答案输出1,waN次
3,注意输出格式,waN次
假设两个数a和b,则a和b的乘积等于gcd(a,b)*(a和b的最小公倍数)。
#include
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f//将近ll类型最大数的一半,而且乘2不会爆ll
const ll mod = 1000000007;
const int MAXN = 10000;
int aa[20][30];
int mon[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
int gcd(int a, int b)
{
return b==0? a: gcd(b, a%b);
}
void init()//打表
{
for(int i=1; i<=12; ++i)
{
for(int j=1; j<=mon[i]; ++j)
{
aa[i][j] = i*j;
}
}
}
int main()
{
init();
int t, m=1;
cin >> t;
while(t--)
{
int a, b, c, x=0, y=0, sum=0;
scanf("%d %d %d", &a, &b, &c);
int cc = a*b;
for(int i=1; i<=12; ++i)
{
for(int j=1; j<=mon[i]; ++j)
if(aa[i][j] == cc && gcd(i, j) == a)
{
sum++;
x = i;
y = j;
}
}
x = min(x, y); y = max(x, y);
printf("Case #%d: ", m++);
if(sum == 0) puts("-1");
else if(sum>1) puts("1");
else
{
if(y==29 && ((c%4 == 0 && c%100 != 0) || c%400 == 0) && x==2)
printf("%d/0%d/%d\n", c, x, y);
else if(y==29 && !((c%4 == 0 && c%100 != 0) || c%400 == 0) && x==2) puts("-1");
else
{
if(x>9 && y > 9) printf("%2d/%2d/%2d\n", c, x, y);
else if(x <10 && y>9) printf("%2d/0%d/%2d\n", c, x, y);
else if(x>9 && y<10) printf("%2d/%2d/0%d\n", c, x, y);
else printf("%2d/0%d/0%d\n", c, x, y);
}
}
}
return 0;
}