算我出生年月日-----好吧有点小难度。100分求程序。

Y.A.K.E 2011-12-16 09:47:04
现在是2011年。
设我出生月份数是X,
日期数为Y,
出生年份四位数为a , b, c,d (如果是1983 就a=1 b=9 c=8 d=3)

条件一: X * Y = 10c + d (也就是年份后两位)
条件二: X + Y= a + b + c + d

从我还能逛论坛发帖,还设计多元方程,已知 我是上个世纪出生的。。
所以a=1 b=9

(不能作为计算的一个提示:1+9+a+b = X+Y =也等于我现在的年龄)

求出我出生年月日。
求前后100年内(1911-2111)能符合条件一和条件二的出生年月日。
能求么?100分求答案。(我所有的分。。。。)

...全文
324 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyJoy 2011-12-18
  • 打赏
  • 举报
回复
都已知了是上个世纪的
把握 2011-12-18
  • 打赏
  • 举报
回复
1952 4 13
Y.A.K.E 2011-12-18
  • 打赏
  • 举报
回复
貌似我忘记说一个很重要的问题了,那就是我生日是农历,我貌似要计算是农历的。这个才是难度点。上面的我也能写出类似的来~~~
Y.A.K.E 2011-12-18
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 xunni1000 的回复:]
貌似我忘记说一个很重要的问题了,那就是我生日是农历,我貌似要计算是农历的。这个才是难度点。上面的我也能写出类似的来~~~
[/Quote]

农历 农历。 谁懂啊~~
Alexander 2011-12-17
  • 打赏
  • 举报
回复
接着上面的思路,把代码帖一下吧:

#include<stdio.h>

int isLeap(int);
void computeDate(int,int,int,int,int);

int main()
{
int days[12]={31,29,31,30,31,30,31,31,30,31,30,31},quotient;
register int x,y;

for(x=1;x<13;x++)
for(y=1;y<=days[x-1];y++)
{
quotient=(x*y-x-y+10)/9;
if(!((x*y-x-y+10)%9) && quotient>0 && quotient<10)
computeDate(1,9,quotient,x,y);

quotient=(x*y-x-y+2)/9;
if(!((x*y-x-y+2)%9) && quotient>-1 && quotient<10)
computeDate(2,0,quotient,x,y);

quotient=(x*y-x-y+3)/9;
if(!((x*y-x-y+3)%9) && quotient>-1 && quotient<2)
computeDate(2,1,quotient,x,y);
}

return(0);
}

int isLeap(int year)
{
return(year%400==0||(year%4==0&&year%100));
}

void computeDate(int a,int b,int c,int month,int day)
{
static int count=0;
int d=month*day-c*10;
int year=a*1000+b*100+c*10+d;

if(year<1911 || year>2111)
return;

if(d>-1 && d<10)
{
if(month==2&&day==29&&!isLeap(year))
return;

printf("No. %d: %d%d%d%d-%d-%d",++count,a,b,c,d,month,day);

if(a==1&&b==9&&month+day==20&&2011-year==20)
printf("\t<==your birth day");

printf("\n");
}
}
Alexander 2011-12-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 selooloo 的回复:]

我承认我无聊了

C/C++ code
#include <stdio.h>

int is_leapyear(int year)
{
if(year%400==0)
return 1;
if(year%4==0 && year%100!=0)
return 1;
return 0;
}
int days(int year,int m……
[/Quote]

感觉不要动不动就用穷举,这题用不着数论什么的较深的理论知识,用初等数学的知识就可以化简了。

1式-2式得到:
x*y-x-y=9*c-a-b 3
又知道a、b只有(1,9)、(2,0)、(2,1)三种组合,可得到3个方程。
x*y-x-y=9*c-10 4
x*y-x-y=9*c-2 5
x*y-x-y=9*c-3 6
再有0≤c≤9,综合这些条件只需对x、y(月、日)作穷举就可以得到答案了。
PS:在下真的很懒,其实用其它方法化简还可以得到更好的程序的。
fredshao 2011-12-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 selooloo 的回复:]

我承认我无聊了

C/C++ code
#include <stdio.h>

int is_leapyear(int year)
{
if(year%400==0)
return 1;
if(year%4==0 && year%100!=0)
return 1;
return 0;
}
int days(int year,int m……
[/Quote]
bless LZ
Y.A.K.E 2011-12-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 rotaxe 的回复:]
应该不止一组,我先说一个
1995.5.19
[/Quote]

这个答案符合要求,应该有很多答案。。
luoxi_123123 2011-12-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zhongxianyao 的回复:]

引用 5 楼 selooloo 的回复:
我承认我无聊了


C/C++ code

#include <stdio.h>

int is_leapyear(int year)
{
if(year%400==0)
return 1;
if(year%4==0 &amp;&amp; year%100!=0)
return 1;
return 0;
}
……
[/Quote]

很好很强大啊。
wintree 2011-12-16
  • 打赏
  • 举报
回复
for(){

for()
{
表达式!
}

}
Rotaxe 2011-12-16
  • 打赏
  • 举报
回复
应该不止一组,我先说一个
1995.5.19
薛定谔之死猫 2011-12-16
  • 打赏
  • 举报
回复
解多元一次方程而已,大不了每个解都顺着找~
编程点滴 2011-12-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 selooloo 的回复:]
我承认我无聊了


C/C++ code

#include <stdio.h>

int is_leapyear(int year)
{
if(year%400==0)
return 1;
if(year%4==0 && year%100!=0)
return 1;
return 0;
}
int days(i……
[/Quote]

没事回一下贴
柯本 2011-12-16
  • 打赏
  • 举报
回复
我用CB也无聊一把

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TDate t;
int x,y,year,a,b,c,d;
for(t=StrToDate("1911-1-1");t< StrToDate("2112-1-1");t++)
{
year=YearOf(t);
x=MonthOf(t);
y=DayOf(t);
a=year/1000;
b=(year/100)%10;
c=(year/10)%10;
d=year%10;
if ((a==1) && (b==9 ) && ( x * y == 10*c + d ) && (x+y==a + b + c + d)
&& (10+a+b==x+y) && (x+y==2011-year))
Memo1->Lines->Add(DateToStr(t));

}
}
whc748227431whc 2011-12-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 mdbsdn 的回复:]
引用 7 楼 cs1275 的回复:

看代码也是一种享受...
引用 5 楼 selooloo 的回复:

我承认我无聊了

C/C++ code
#include <stdio.h>

int is_leapyear(int year)
{
if(year%400==0)
return 1;
if(year%4==0 &amp;amp;&amp;am……
[/Quote]+++
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cs1275 的回复:]

看代码也是一种享受...
引用 5 楼 selooloo 的回复:

我承认我无聊了

C/C++ code
#include <stdio.h>

int is_leapyear(int year)
{
if(year%400==0)
return 1;
if(year%4==0 &amp;&amp; year%100!=0)
return 1;
r……
[/Quote]
回贴也是种美德.....
Cs1275 2011-12-16
  • 打赏
  • 举报
回复
看代码也是一种享受...
[Quote=引用 5 楼 selooloo 的回复:]

我承认我无聊了

C/C++ code
#include <stdio.h>

int is_leapyear(int year)
{
if(year%400==0)
return 1;
if(year%4==0 && year%100!=0)
return 1;
return 0;
}
int days(int year,int m……
[/Quote]
just_swizard 2011-12-16
  • 打赏
  • 举报
回复
遍历啊,一个个带入条件检查,最最直接的想法,实现起来也没啥高科技啊,哇咔咔
selooloo 2011-12-16
  • 打赏
  • 举报
回复
我承认我无聊了

#include <stdio.h>

int is_leapyear(int year)
{
if(year%400==0)
return 1;
if(year%4==0 && year%100!=0)
return 1;
return 0;
}
int days(int year,int month)
{
int pd[12]={31,28,31,30,31,30,31,31,30,31,30,31},
rd[12]={31,29,31,30,31,30,31,31,30,31,30,31};

if(is_leapyear(year))
return rd[month-1];
else
return pd[month-1];
}

int main(void)
{
int a,b,c,d,x,y,year;

for(year=1911;year<2112;++year)
{
d=year%10;
c=(year%100-d)/10;
b=(year%1000-year%100)/100;
a=(year-year%1000)/1000;
for(x=1;x<=12;++x)
{
for(y=1;y<=days(year,x);++y)
{
if((x*y==10*c+d) && (x+y==a+b+c+d))
{
printf("%d %d %d\n",year,x,y);
if(a==1 && b==9 && 10+a+b==x+y && x+y==2011-year)
printf("your birth: %d %d %d\n",year,x,y);
}

}
}
}
getchar();
return 0;
}

69,380

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧