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

本文探讨了爱因斯坦提出的一道数学难题——寻找一条特殊阶梯的阶数,该阶梯在不同步幅下会有特定的剩余阶数,仅当步幅为7时才能恰好走完。文章提供了两种解题思路及代码实现。

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

题目

述: 爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值