根据楼主的题意,一月份的第一个星期一首次去,则存在a和b在一月的1-7号中的某一天同时去健身的,
1月的第一个星期一可以是1,2,3,4,5,6,7号,为什么?
星期天 星期一 星期二 星期三 星期四 星期五 星期六
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
1
2
3
4
5
6
7
.........
聪明的你应该知道为什么只有1-7号的可能性了吧!
把这可能性设为k;
接下来:
A每隔四天去一次(即第5天去)设为 a=5,这样A去的日子是 k,k+a,k+a+a,....k+na ,但k+na要小于32(因为一月只有31天)
B每隔三天去一次(即第四天去)设为b=4,这样B去的日子是 k,k+b,k+b+b,....k+mb ,但k+ma要小于32(因为一月只有31天)
答案呼之欲出!简单的数学道理如果要
k+na=k+mb
同时k+mb<32
还是演算一下
k+na=k+mb
na=mb 这个等式的最小整数值是a和b的最小公倍数,
因此该题在数学上可以理解为 a,b的最小公倍数+k 的值如果小于32 ,则A,B2人会在一月份会再次相遇,否则,不会再次相遇!
数学模型有了,编程实现也就容易了,其实程序很简单!
不过也许我理解错题目了,那希望大牛们,一笑飘过!(因为我常出错,这里强烈的鄙视自己一下!)
程序代码:
#include <stdio.h>
int main()
{
int a=0,b=0,flag=0,temp=0,meet=0;
int k=1;
printf("Input A'rate:");
scanf("%d",&a);
printf("Input B'rate:");
scanf("%d",&b);
for(k;k<8;k++)
{
temp=a*b+k;
if(temp<32)
{
//printf("A meets B is %d day\n",temp);
flag++;
}
if(flag==0)
{
meet++;
printf("他们第一次相遇可能在1月%d号\n",k);
}
flag=0;
}
if(meet<1)printf("超过一次相遇,他们说谎\n");
else printf("A,B在以上 %d 天都可以成为首次相遇日\n",meet);
return 0;
}
运行效果:
Input A'rate:5
Input B'rate:4
超过一次相遇,他们说谎
请按任意键继续. . .
Input A'rate:6
Input B'rate:5
他们第一次相遇可能在1月2号
他们第一次相遇可能在1月3号
他们第一次相遇可能在1月4号
他们第一次相遇可能在1月5号
他们第一次相遇可能在1月6号
他们第一次相遇可能在1月7号
A,B在以上 6 天都可以成为首次相遇日
请按任意键继续. . .