Chinaunix首页 | 论坛 | 博客
  • 博客访问: 77588
  • 博文数量: 32
  • 博客积分: 1440
  • 博客等级: 上尉
  • 技术积分: 375
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-25 16:03
文章分类

全部博文(32)

文章存档

2010年(12)

2008年(20)

我的朋友

分类: C/C++

2008-07-21 14:21:58

爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最最后剩一阶,若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问这条阶梯共有多少阶?此题算法还可考虑求1、2、4、5的最小公倍数n
 
 这个题目我一开始想的是,只要拿最后一个条件计算,就可以得到。后来细想,不对。必须全部条件满足才可以成立
 
 
下面是两个方法
 
方法一:完全按条件给的做。很简单
 
#include
int main()
{
int i=1; /*i为所设的阶梯数*/
while(!((i%2==1)&&(i%3==2)&&(i%5==4)&&(i%6==5)&&(i%7==0)))
++i; /*满足一组同余式的判别*/
printf("Staris_number=%d\n",i);
}

*运行结果
Staris_number=119

 

 

方法二

 

  此题算法还可考虑求1、2、4、5的最小公倍数n,然后判t(t为n-1)≡0(mod7)是否成立,若不成立则t=t+n,再进行判别,直至选出满足条件的t值。

/***************************************************
 * 问题:在你面前有一条长长的阶梯。如果你每步跨2阶,
 *      那么最后剩下1阶;如果你每步跨3阶,那么最后
 *      剩2阶;如果你每步跨5阶,那么最后剩4阶;如果
 *      你每步跨6阶,那么最后剩5阶;只有当你每步跨
 *      7 阶时,最后才正好走完,一阶也不剩。
 *     请问这条阶梯至少有多少阶?
 * 分析:所求的阶梯数应比 2、3、5、6 的公倍数
 *      (即 30 的倍数)小 1,并且是 7 的倍数。
 *       因此只需从 29、59、89、119、……中找
 *       7 的倍数就可以了。可以得到答案为 119 阶
 ***************************************************/

#include <stdio.h>

int main(void)
{
    int steps = 29, i = 1;
    
    while ( steps % 7 )
    {
        steps = (30 * ++i) - 1;
    }
    
    printf("Total steps: %d\n", steps);
    
    return 0;
}


 

 
阅读(3261) | 评论(0) | 转发(0) |
0

上一篇:函数指针和指针函数

下一篇:结构体指针

给主人留下些什么吧!~~