码迷,mamicode.com
首页 > 其他好文 > 详细

【华为练习题】 爱因斯坦阶梯(初级)

时间:2016-08-22 20:12:20      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

【华为练习题】 爱因斯坦阶梯(初级)

题目

述: 爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最最后剩一阶,若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问这条阶梯共有多少阶?

分析

一个数满足除以2余1,除以3余2,除以5余4,除以6余5,那么这个数为2,3,5,6的最小公倍数减一。

解答

直接解法

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
    int i = 29;
    while (i % 7)
    {
        i += 30;
    }
    cout << i << endl;
    return 0;
}

通用解法

#include <iostream>
using namespace std;

int maxDivisor(int n, int m){
    int n1 = n > m ? n : m;
    int n2 = n + m - n1;
    while (n1 % n2)
    {
        int divisor = n1 % n2;
        n1 = n2;
        n2 = divisor;
    }
    return n2;
}

int minMultiple(int n, int m){
    int div = maxDivisor(n,m);
    return n * m / div;
}


int main()
{
    int i = minMultiple(minMultiple(minMultiple(2,3),5),6), n = i - 1;
    while (n % 7)
    {
        n += i;
    }
    cout << n << endl;
    return 0;
}

【华为练习题】 爱因斯坦阶梯(初级)

标签:

原文地址:http://blog.csdn.net/sps900608/article/details/52279434

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!