2013金山西山居创意游戏程序挑战赛——初赛(3) 1001 生日猜猜猜 hdu 4551
来源:互联网 发布:蜜芽 知乎 编辑:程序博客网 时间:2024/05/21 10:20
生日猜猜猜
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 0 Accepted Submission(s): 0
小明对生日十分看重,因为他可以得到祝福,可以和朋友亲人一起分享快乐,可以为自己的人生做一次总结,并且...能够收到好多礼物!不过小明是个神秘的人,不会轻易告诉你他的生日,现在他想到一个办法,让你去猜他的生日是哪一天。小明会告诉你如下三个信息:1. 出生月份和出生日子的最大公约数;2. 出生月份和出生日子的最小公倍数;3. 出生年份;现在要求你猜出小明的生日。
第一行输入一个正整数T,表示总共有T组册数数据(T <= 200);对于每组数据依次输入三个数x,y,z,x表示出生月份和出生日子的最大公约数(1<= x <=1000);y表示出生月份和出生日子的最小公倍数(1<= y <=1000);z表示出生年份(1900 <= z <= 2013)。每组输入数据占一行。
对于每组数据,先输出Case数。如果答案不存在 ,输出“-1”;如果答案存在但不唯一 ,输出“1”;如果答案唯一,输出生日,日期格式为YYYY/MM/DD;每组输出占一行,具体输出格式参见样例。
312 24 19923 70 19999 18 1999
Case #1: 1992/12/24Case #2: -1Case #3: 1999/09/18
#include<stdio.h>
//陷阱比较多,要判断这样的数字是否存在,存在时还要判断在这一年中是否有这一天
//若不止一天的话还要设置变量统计
int n,a,b,c,i,j,k,tt,kkk;
int mon1[]={0,31,28,31,30,31,30,31,31,30,31,30,31};//平年
int mon2[]={0,31,29,31,30,31,30,31,31,30,31,30,31};//闰年
int mmm,ddd;
void ff(int mm,int dd)//下面的代码有些啰嗦,将就着看吧
{
int num1=mm,num2=dd;
int aa,bb,temp;
if(num1<num2)//一下求最大公约数,最小公倍数
{
temp=num1;
num1=num2;
num2=temp;
}
aa=num1;
bb=num2;
while(bb!=0)
{
temp=aa%bb;
aa=bb;
bb=temp;
}
if(aa==a&&num1*num2/a==b)//判断 mm dd最大公约数 最小公倍数是否符合题意
{
if(c%4==0&&c%100!=0||c%400==0)//闰年
{ if(mon2[mm]>=dd)
{
if(kkk==0)//第一次时直接放入 mmm ddd,第二次以后不放入
{
mmm=mm;ddd=dd;
}
kkk++;
}
}
else if(mon1[mm]>=dd)//平年
{
if(kkk==0)
{
mmm=mm;ddd=dd;
}
kkk++;
}
}
}
int main()
{
int ll=1;
scanf("%d",&n);
while(n--)
{
scanf("%d%d%d",&a,&b,&c);
if(a*b>372||c<1900||c>2013||a>12)// 最小公倍数< 12月* 31天=372
{
printf("Case #%d: -1\n",ll++); continue;
}
tt=a*b;//两数乘积=最大公约数*最小公倍数
kkk=0;//符合条件的统计
for(i=a;i<=b&&i<=12;i++)//月份肯定大于最大公约数,小于最小公倍数,i=i+a也可以
if(tt%i==0&&tt/i<32)//
{
ff(i,tt/i);//判断月份i,天 tt/i的最大公约数最小公倍数是否相符
}
if(kkk>1) printf("Case #%d: 1\n",ll++);
else if(kkk==1)
{
printf("Case #%d: %d/%02d/%02d\n",ll++,c,mmm,ddd);
}
else if(kkk==0)
printf("Case #%d: -1\n",ll++);
}
}
//////////////////////上面代码太挫了,优化了一下
Accepted45510MS228K1584 BC++#include<stdio.h>
int n,a,b,c,i,j,k,tt,kkk;
int mon1[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int mon2[]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int mmm,ddd;
void gongshu(int mm,int dd)
{
int num1=mm,num2=dd;
int temp;
if(num1<num2)
{
temp=num1;
num1=num2;
num2=temp;
}
while(num2!=0)
{
temp=num1%num2;
num1=num2;
num2=temp;
}
if(num1==a&&mm*dd/a==b)
{
if(c%4==0&&c%100!=0||c%400==0)
{
if(mon2[mm]>=dd)
{
if(kkk==0)
{
mmm=mm;
ddd=dd;
}
kkk++;
}
}
else if(mon1[mm]>=dd)
{
if(kkk==0)
{
mmm=mm;
ddd=dd;
}
kkk++;
}
}
}
int main()
{
int ll=1;
scanf("%d",&n);
while(n--)
{
scanf("%d%d%d",&a,&b,&c);
if(a*b>372||c<1900||c>2013||a>12)
{
printf("Case #%d: -1\n",ll++); continue;
}
tt=a*b;
kkk=0;
for(i=a;i<=b&&i<=12;i=i+a)
if(tt%i==0&&tt/i<32)
{
gongshu(i,tt/i);
}
if(kkk>1) printf("Case #%d: 1\n",ll++);
else if(kkk==1)
{
printf("Case #%d: %d/%02d/%02d\n",ll++,c,mmm,ddd);
}
else if(kkk==0)
printf("Case #%d: -1\n",ll++);
}
}
- 2013金山西山居创意游戏程序挑战赛——初赛(3) 1001 生日猜猜猜 hdu 4551
- 2013金山西山居创意游戏程序挑战赛——初赛(3)生日猜猜猜
- 2013金山西山居创意游戏程序挑战赛——初赛(3)
- 2013金山西山居创意游戏程序挑战赛——初赛(3)
- 2013金山西山居创意游戏程序挑战赛——初赛(2) C 卡片游戏 (hdu 4550 )
- 2013金山西山居创意游戏程序挑战赛——初赛(1) A 魔法串
- 2013金山西山居创意游戏程序挑战赛——初赛(1) C CD操作
- 2013金山西山居创意游戏程序挑战赛——初赛(1)题解
- 2013金山西山居创意游戏程序挑战赛——初赛(1)
- 2013金山西山居创意游戏程序挑战赛——初赛(1) A 魔法串
- 2013金山西山居创意游戏程序挑战赛——初赛(1)
- 2013金山西山居创意游戏程序挑战赛——初赛(2)
- 2013金山西山居创意游戏程序挑战赛——初赛(4)
- 2013金山西山居创意游戏程序挑战赛——初赛(4)
- 2013金山西山居创意游戏程序挑战赛——初赛(2)hdu 4548 4549 4550
- 2013金山西山居创意游戏程序挑战赛——初赛(2) A 美素数(hdu 4548)
- HDU 4547 CD操作 2013金山西山居创意游戏程序挑战赛——初赛(1)
- 2013金山西山居挑战赛 初赛第3场 1001 生日猜猜猜
- 分支限界---->15-谜问题
- PowerDesign15几个常用功能:字段允许重名等
- ActiveMQ和spring集成
- 从2-3-4树谈到Red-Black Tree(红黑树)
- 爆笑百家讲坛之十大逆袭情侣.
- 2013金山西山居创意游戏程序挑战赛——初赛(3) 1001 生日猜猜猜 hdu 4551
- TFTP 服务
- 降维(二)----Laplacian Eigenmaps
- 黑马程序员JAVA基础-基本语句
- php模拟登陆,网络爬虫
- 教你透彻了解红黑树
- 学习C++ 必看的书,你看过几本了?
- Java Enum 枚举
- 一步一图一代码,一定要让你真正彻底明白红黑树