爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最最后剩一阶,若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问这条阶梯共有多少阶?
两种方法:
方法1:从1开始逐个累增进行试验
unsigned int GetStairNum ()
{
for(unsigned int n = 1; ;++n)
{
if((1 == n % 2) && (2 == n % 3) && (4 == n % 5) && (5 == n % 6) && (0 == n % 7))
return n;
}
}
或者:
unsigned int GetStairNum ()
{
unsigned int StairNum = 0;
int flag=1;
while(flag)
{
if(StairNum%2 ==1 && StairNum%3 ==2 && StairNum%5 == 4 && StairNum%6 == 5 && StairNum %7 == 0)
{
flag =0;
return StairNum;
}
StairNum++;
}
return 0;
}
方法二:
楼梯阶数为一个奇数,且是7的倍数,故可以每步跨14(7+14才是奇数,7+7是偶数),进行一个循环
unsigned int GetStairNum ()
{
int n = 7;
while(1)
{
if((1 == n % 2) && (2 == n % 3) && (4 == n % 5) && (5 == n % 6))
return n;
else
n += 14;
}
}
或者:
unsigned int GetStairNum ()
{
unsigned int n = 7;
while((1 != n % 2) || (2 != n % 3) || (4 != n % 5) || (5 != n % 6))
n += 14;
return n;
}