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

来源:互联网 发布:java分数约分 编辑:程序博客网 时间:2024/04/29 19:04

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

题目

述: 爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨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;}
1 0
原创粉丝点击