一题目名称:求N个数的最大公约数和最小公倍数
二题目内容

  1. 基本要求:求N个数的最大公约数和最小公倍数
  2. 提高要求:
    Hanks博士是BT(Bio-Tech,生物技术)领域的知名专家,他的儿子名叫Hankson。现在,刚刚放学回家的Hankson正在思考一个有趣的问题。
    今天在课堂上,老师讲解了如何求两个正整数c1和c2的最大公约数和最小公倍数。现在Hankson认为自己已经熟练地掌握了这些知识,他开始思考一个“求公约数”和“求公倍数”之类问题的“逆问题”,这个问题是这样的:已知正整数a0,a1,b0,b1,设某未知正整数x满足:
    A. x和a0的最大公约数是a1;
    B. x和b0的最小公倍数是b1。
    Hankson的“逆问题”就是求出满足条件的正整数x。但稍加思索之后,他发现这样的x并不唯一,甚至可能不存在。因此他转而开始考虑如何求解满足条件的x的个数。请你帮助他编程求解这个问题。
    三算法设计
    1.基本要求:
    求多个数的最大公约数和最小公倍数,可以拆分成求多组数的最大公约数和最小公倍数。即求得前两个数的最大公约数和最小公倍数后,依次与后一个数组合再求新的最大公约数和最小公倍数,当和最后一个数求完后结果即为这组数的最大公约数和最小公倍数。
    2.提高要求:由题目要求中的x和a0能被a1整除,x一定是a1的倍数,同时b1又能被x和b0整除,问题归结为已知两数中的一数和他们的最大公约数和最小公倍数,求另外一数。基本思路为可使x取a1的倍数,让x在循环里倍数增长,只需再循环里判断x和b0的最小公倍数是否是b1即可,是则输出,否则x在原来基础上加a1,继续判断。
    程序流程图:
    A.基本要求:求N个数的最大公约数和最小公倍数以及hanks问题
    B. 提高要求
    求N个数的最大公约数和最小公倍数以及hanks问题
    四调试截图
    由于这些函数主体是由四部分组成,所以将这四部分模块分别进行调试,得出调试结果如下:
    1.Gcd()函数部分(即多个数最大公因数)
    2.Gcd-1()函数部分(即两个数最大公约数)
    (由于我在做的时候Gcd部分输入选择了两位数,所以1,2函数模块调试结果相同)求N个数的最大公约数和最小公倍数以及hanks问题3. Multiple()函数部分求N个数的最大公约数和最小公倍数以及hanks问题
    4.Getx()函数部分
    求N个数的最大公约数和最小公倍数以及hanks问题
    求N个数的最大公约数和最小公倍数以及hanks问题
    补充:
    由于在上边我调试的是两位数,不能确保系统是调用函数一模块还是函数二模块进行计算,为了确保函数一模块(即多位数最大公因数模块)是有效的,我进行了第二次的调试,使用三位数进行调试,发现函数一模块能够正常使用,调试截图如下:
    求N个数的最大公约数和最小公倍数以及hanks问题
    求N个数的最大公约数和最小公倍数以及hanks问题
    五测试结果
    1结果测试求N个数的最大公约数和最小公倍数以及hanks问题
    2.结果合理性测试
    求N个数的最大公约数和最小公倍数以及hanks问题
    由图片可以看出,若输入数字不符合输入条件(1、 x和a0的最大公约数是a1;2、x和b0的最小公倍数是b1),则系统会一直提示请按规则输入数字,从而避免了结果的错误。
    六遇到的困难及解决方案
    首先是hanks题意的理解问题,刚开始看到题目很懵,有点找不到思路。通过查询相关解释以及研读别人的代码,渐渐理解了题意,慢慢有了做题思路。其次是程序的调试问题,以前简单的认为调试就是运行出程序结果就行,从老师第一次作业的点评中我发现了调试是一项新的技能,并且自己在网上慢慢学习VC调试方法,渐渐理解了调试的意义。
    七参考资料
    1.https://blog.csdn.net/weixin_44373412/article/details/88727515
    2.https://blog.csdn.net/right12345/article/details/88756518?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
    3.https://www.bilibili.com/video/BV1Hs411d7ch?from=search&seid=11840726121343699265(vc调试学习视频)

相关文章: