今年的植树节(2012 年 3 月 12 日),小明和他的叔叔还有小伙伴们一起去植树。休息的时候,小明的同学问他叔叔多大年纪,他叔叔说:“我说个题目,看你们谁先猜出来!”
“把我出生的年月日连起来拼成一个 8 位数(月、日不足两位前补 0)正好可以被今天的年、月、日整除!”
他想了想,又补充到:“再给个提示,我是 6 月出生的。”
根据这些信息,请你帮小明算一下,他叔叔的出生年月日。
格式是年月日连成的 8 位数。例如,如果是 1948 年 6 月 12 日,就写:19480612。
答案:19550604
解法:可以采用单个数字,每一个数字为独立个体(最麻烦,一看就懂)
#include <iostream>
using namespace std;
void judge(int a,int b,int c,int d,int e,int f,int g,int h)
{
if((e*10+f)<=12&&(g*10+h)<=31&&(a*1000+b*100+c*10+d)<2012&&(a*1000+b*100+c*10+d)>1900)
{
long long sum=a*10000000+b*1000000+c*100000+d*10000+e*1000+f*100+g*10+h;
if(sum%2012==0&&sum%3==0&&sum%12==0)
cout<<a<<b<<c<<d<<e<<f<<g<<h<<endl;
}
}
int main()
{
int year,day;
for(int a=1;a<=2;a++)
{
for(int b=0;b<=9;b++)
{
for(int c=0;c<=9;c++)
{
for(int d=0;d<=9;d++)
{
for(int e=0;e<=0;e++)
{
for(int f=6;f<=6;f++)
{
for(int g=0;g<=3;g++)
{
for(int h=0;h<=9;h++)
{
judge(a,b,c,d,e,f,g,h);
}
}
}
}
}
}
}
}
return 0;
}
稍微优化一点点:(分别定义年月日)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int year,month,day;
long int sum;
for(year=1900;year<=2012;year++)
{
for(month=6;month<=6;month++)
{
for(day=1;day<=31;day++)
{
sum=year*10000+month*100+day;
if(sum%2012==0&&sum%3==0&&sum%12==0)
printf("%d",sum);
}
}
}
return 0;
}
直接将年月日定义为一个数:
#include <stdio.h>
#include <stdlib.h>
int main()
{
long int sum;
for(sum=19000001;sum<=20120312;sum++)
{
if((sum%100)<=31&&(sum/100)%100==6&&sum%2012==0&&sum%3==0&&sum%12==0)
printf("%d",sum);
}
return 0;
}
还有很多更有的方法,欢迎大家留言讨论。