最近去面试了,面了几家公司,深刻认识到一个道理,越是基础的问题越重要,越能考察一个人的技术功底与逻辑思维。比如我们接下来要说的求两个数的最大公约数的问题。这类简单的算法题目一般会出现在面试环节,面试官要求你当场手撕的那种。

言归正传,首先我们要知道面试官出求两个数的最大公约数这个题目的目的是什么。知己知彼,才能百战不殆嘛。这个问题首先考察的是候选人的数学功底,就是看你知不知道一些求公约数的算法,比如辗转相除法、更相减损法等;其次就是考察你的代码能力了,看你能不能把算法用代码写出来,写的代码有没有bug,注没注意边界的处理等等。下面我们分别来看一下,不同的候选人会有什么样的表现。

第一种,数学功底不扎实的,不知道目前已有的求公约数的方法,那估计只能写出下面这种代码了。

//暴力求解private static int getCommonDivisor(int m,int n){//非法参数的处理if(m <= 0 || n <= 0){return -1;}int min = Math.min(m,n);int res = 1;for(int i = 1;i <= min;i ++){if(m % i == 0 && n % i == 0){res = i;}}return res;}

这种就是暴力求解,不做过多解释了。面试官显然不会满意这种代码。

第二种,知道一些求公约数的算法,但是无法用代码实现,这种属于代码功力不够的,估计只能回家等通知了。

第三种,知道求公约数的算法,并且能写出代码的。比如说告诉面试官知道更相减损法可以求解,基本原理是**以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。**一般这时候面试官就会表示赞许,然后让你代码实现下,接着你就写出了如下的代码:

//更相减损法
private static int getCommonDivisor2(int m,int n){//非法参数的处理if(m <= 0 || n <= 0){return -1;}while(m != n){if(m > n){m = m - n;}else{n = n - m;}}return m;
}

怎么样,是不是很简洁!

当然,你也可以用辗转相除法实现,其基本原理是两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。代码如下:

//辗转相除法
//两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数
private static int getCommonDivisor3(int m,int n){//非法参数的处理if(m <= 0 || n <= 0){return -1;}if(m < n){int temp = m;m = n;n = temp;}int c = m % n;while(c != 0){m = n;n = c;c =  m % n;}return n;
}

一般情况下,能说出最熟悉的一种方法并给出其具体实现就可以了,这道题目基本就过关了。

最后,其实求最大公约数的方法还有很多,比如质因数分解法、短除法等等,大家感兴趣的话可以多去了解下,扩展下自己的思维。

觉得文章有用的话,点赞+关注呗,好让更多的人看到这篇文章,也激励博主写出更多的好文章。
更多关于算法、数据结构和计算机基础知识的内容,欢迎扫码关注我的原创公众号「超悦编程」。

推荐阅读
为什么有红黑树?什么是红黑树?看完这篇你就明白了
《深入浅出话数据结构》系列之什么是B树、B+树?为什么二叉查找树不行?
都2020年了,听说你还不会归并排序?手把手教你手写归并排序算法
为什么会有多线程?什么是线程安全?如何保证线程安全?
《一文说透数据结构》系列之什么是堆?看这一篇就够了

面试官:来写个代码求一下两个数的最大公约数吧相关推荐

  1. 第四周项目五-用递归方法求解(用递归求出两个数的最大公约数)

    /* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年3月22日 *版 本 ...

  2. 【C语言】实现求两个数的最大公约数【四种算法】

    题目 给定两个数,求这两个数的最大公约数 例如: 输入:20 40 输出:20 解题思路 最大公约数:即两个数据中公共约数的最大者 求解的方式比较多,暴力穷举.辗转相除法.更相减损法.Stein算法算 ...

  3. 面试官:你知道怎么求素数吗?

    摘要:面试官:你知道怎么求素数吗?我:求素数? 本文分享自华为云社区<很多人不知道的求素数的正确方法>,原文作者:bigsai . 前言 现在的面试官,是无数开发者的梦魇,能够吊打面试官的 ...

  4. Chat Top10 | 给面试官手写一个 Nacos,多少 K?

    每周推荐的最新 Chat Top10 没有固定主题,仅仅是编辑部参考多方评分和反馈挑选出来的好文章,不一定适合你的口味,建议小心食用- 我们一起看下第三期 Chat Top10 都有哪些内容 ???? ...

  5. ACMNO.22 C语言-公约公倍2 写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。 输入 两个数 输出 最大公约数 最小公倍数

    题目描述 写两个函数,分别求两个整数的最大公约数和最小公倍数, 用主函数调用这两个函数,并输出结果两个整数由键盘输入. 输入 两个数 输出 最大公约数 最小公倍数 样例输入 6 15 样例输出 3 3 ...

  6. ACMNO.30 C语言-宏交换 定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。

    题目描述 定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参.输出已交换后的两个值. 输入 两个数,空格隔开 输出 交换后的两个数,空格隔开 样例输入 1 2 样例输出 2 ...

  7. 程序员数学基础【四、取模应用-判断奇偶数、判断素数、求两个数的最大公约数、水仙花数】(Python版本)

    测试使用语言:[Python] 由于此类语言入门非常容易,哪怕初中生亦可以,并且本科/研究生写论文.做实验多数所用语言都是[Python]故而选择此语言. 代码运行平台:[win10 x64] 代码环 ...

  8. 暴力 gcd __gcd (详解)C语言求两个数的最大公约数

    首先我们要先知道gcd是什么东西? GCD作为缩写意义有多种.它通常表示最大公约数(greatest common divisor,简写为gcd:或highest common factor,简写为h ...

  9. php怎么求最小公倍数,C++_详解C语言求两个数的最大公约数及最小公倍数的方法,求两个正整数的最大公约数nbs - phpStudy...

    详解C语言求两个数的最大公约数及最小公倍数的方法 求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法.通式分别为 f(x, y) = f(y, x%y) ...

最新文章

  1. iOS开发-UITextField手机号和邮箱验证
  2. 数据库常用的基本操作
  3. 为什么我启动哪一个tomcat都是启动同一个tomcat(tomcat7)
  4. 棱镜刘大澎:云时代的手游SDK接入
  5. SAP成都研究院大卫哥:SAP C4C中国本地化之微信小程序集成
  6. java 中文域名转码_转换java方法
  7. ubuntu-kylin16.04搭建lamp环境。
  8. 处理接口超时_开发中那些事儿:为啥update会超时呢?
  9. 判断URL的HTTP状态
  10. 【聚类3】密度聚类+层次聚类
  11. 3_kicad 5.0_PCB计算器(稳压器,布线宽度,电气间距,传输线路,RF衰减器,颜色代码,电路板类别)...
  12. Leetcode 颜色分类
  13. matlab怎么查看工具箱,MATLAB怎么调出工具箱 神经网络matlab工具箱
  14. 从零开始学写脚本(大麦网抢票 上)【第二天】
  15. 基于Cocos2d-x游戏引擎实战开发超人
  16. 计算机英语四六级成绩查询,全国四六级英语成绩查询入口网址-http://cet.neea.edu.cn/cet...
  17. 爬虫python创意_爬虫案例:利用python爬虫关键词批量下载高清大图
  18. 雷迪9000使用说明_雷迪司UPS监控软件使用说明
  19. js在html之前加载,js加载前显示loading(页面加载前)
  20. 惠普linux系统改装win7,惠普EliteDesk800 G3台式机预装win10改win7教程

热门文章

  1. 《非凡的公主希瑞》(She-Ra Princess of Power)[93集全][数码修复][国英双语][RMVB]
  2. 全球及中国隐形眼镜护理液行业消费规模及投资竞争力分析报告2021-2027年
  3. Python xlrd读取、处理excel日期类型
  4. Android Studio汉化(中文支持)
  5. 2019年安徽省大数据与人工智能应用赛总结---本科组
  6. FlashFXP命令行
  7. windows光标移动快捷键操作
  8. Armbian 配置 WiFi
  9. 【思考】冷启动、种子用户的获取和激活
  10. 线性表的顺序存储结构及基本操作