没事发道简单算法题吧。。最近都在撸python小项目或者爬虫机器学习之类的,都快把C++忘了

有n个硬币,其中1个为假币,假币重量较轻,你有一把天平,请问,至少需要称多少次能保证一定找到假币

这道题应该很多人听过,解决方法很简单。不断三等分,为什么要是3这个数字呢?因为两两比较只有三种情况,<, > 或者=

三等分时,有三种情况:

1.n % 3 == 0

2. n % 3 == 1

3. n % 3 == 2

第1种情况直接三等分,都为n/3

第2种情况:分为n/3, n/3, n/3+1, (C语言除法会截断小数点后面的)

第3种情况:分为n/3, n/3+1, n/3+1

然后你发现。不管怎样,都能只称一次就可以判断哪堆是正确的。

所以你需要不断三等分。直到硬币堆只剩1个,就能找到答案。答案为log3(n)取整数

算法应是这样:

int end(int n)
{int ans = 0;if(n % 3 == 0)n--;while(n > 0){n /= 3;ans++;}return ans;
}

可能你不理解为什么上面需要n--

那是因为,当n为3的指数倍时,如9,总有9/3 = 3, 9/3=1,剩下1一个本应该停止,但是还是继续进入循环。。变成3次

所以使用n--来减少一次次数。因为4~8进入循环返回的ans都为2。虽然6满足6%3==0但不会出问题,因为6跟5是返回ans都为2。

特殊的只有n的指数倍,但刻意去找n的指数太浪费时间,所以才使用n%3==0来排除,使用这个也不会影响6, 12等虽然满足3的整数倍但不是n的指数倍的数的问题

用天平找次品的算法题,即三等分算法相关推荐

  1. c++编写算法判断二叉树是否为完全二叉树_[校招-算法题] 二叉树基础算法1

    二叉树是面试中常考的数据结构,因为涉及大量指针操作,因此可以考察思维的严谨性和灵活性.但是校招中的二叉树题规律性很强,因此需要总结一下. 各种常见的二叉树概念 二叉树:每个结点最多有两个子树(左子树和 ...

  2. python算法题_python基本算法题(一)

    1.3位水仙花数计算 "3位水仙花数"是指一个三位整数,其各位数字的3次方和等于该数本身. 例如: ABC是一个"3位水仙花数",则:A的3次方+B的3次方+C ...

  3. Java获取相同字符串算法题,数据结构与算法专题——第四题 字符串相似度

    这篇我们看看 最长公共子序列 的另一个版本,求字符串相似度(编辑距离),我也说过了,这是一个非常实用的算法,在DNA对比,网页聚类等方面都有用武之地. 一:概念 对于两个字符串 A 和 B,通过基本的 ...

  4. python简单算法题_python - 简单算法题 - 列表偏移

    列表偏移 题目要求 lst = [1,2,3,4,5],列表向右偏移两位后,变成lst = [4,5,1,2,3] 思路分析 第一种方式:用切片将 [1,2,3] 和 [4,5] 取出来,之后合并在一 ...

  5. C语言常用算法题 (嵌入式算法题) 28道

    最近准备打牢一点C语言,我会把这些基础的算法粘贴出来,一起,学习交流. 实现加减乘除计算器. 输入两个数并输出最大值,最小值 判断输出,输入0,1,2,3,输出aaaa,bbbbb,cccc,dddd ...

  6. 前端算法题-洗牌算法

    洗牌算法思路 利用随机数生成下标,通过循环将a数组的元素添加到b数组中 并且将添加到b数组的元素 跟a数组元素首位交换保证不会被重复添加到b数组中 // 生成0-54的数组function getAr ...

  7. python比赛积分类算法题_python常用算法题

    一: #计算平均数,中位数和众数 #coding:utf-8 #计算平均数,中位数和众数 import random lst = [random.randint(0,10) for i in rang ...

  8. 算法题-----题目、题解、个人算法、个人思考

    算法题-----题目.题解.个人算法.个人思考,项目说明]这里记录算法题目,这里记录:算法题目简单描述,暂存对于这道题的SK_cache(自己的卡点.自己的思路.自己对这道题的理解,自己的疑问.自己对 ...

  9. 惊!面试现场,简单几道java算法题,90%程序员没写出来

    近几个月很多大学实习生离校找实习工作去了,本以为自己很值钱,实际上发现自己并不值钱,想象着自己能赚很多钱了,结果只能拿到一点微薄的工资,很多人会怪公司给的少,但是你有没有想过,你自己的技术值多少钱?你 ...

  10. LeetCode算法题8:递归和回溯1

    文章目录 前言 回溯算法: 一.合并两个有序链表(简单,可略过) 迭代遍历 一开始没有想到的递归解法 二.反转链表 迭代遍历(头插法): 递归: 三.组合 回溯: 四.全排列 回溯(交换): 回溯: ...

最新文章

  1. 高并发编程-线程通信_使用wait和notify进行线程间的通信2_多生产者多消费者导致程序假死原因分析
  2. 【渝粤题库】陕西师范大学201691 日语(二) 作业
  3. map函数的用法python,详解Python map函数及Python map()函数的用法
  4. Data truncation: Out of range value for column ‘quanity‘ at row 问题解决方案
  5. html实现在线新闻浏览器,使用JQuery Mobile实现手机新闻浏览器
  6. 关于.h 与 汇编中的.inc文件
  7. iOS 录音,播放并上传
  8. 毕业设计 基于单片机的智能蓝牙密码锁设计与实现
  9. GPS从入门到放弃(十六)--- 卫星时钟误差和卫星星历误差
  10. webservice学习wsdl解读(2)
  11. Python Numpy的数组array和矩阵matrix
  12. 什么是 SAP Support Package Stack
  13. el-checkbox点击没反应
  14. URL中特殊字符的转义
  15. uva 10118 Free Candies
  16. 2021-2027全球与中国连续式网带炉市场现状及未来发展趋势
  17. 华为ENSP之MPLS V HubSpoke架构
  18. oracle primavera p6 r8.3 下载,Oracle Primavera P6 R8.3单机版安装指南.pdf
  19. 校车管理系统【JSP + Servlet + HTML + CSS + JavaScript + Bootstrap + Jquery】
  20. 学习笔记:人脸检测和人脸识别

热门文章

  1. bzoj2286: [Sdoi2011消耗战
  2. vnc远程控制linux密码,如何使用VNC远程控制Linux(Centos)?
  3. 浅谈Innodb存储结构(Buffer Pool、Double Write Buffer、Change Buffer、Redo log、Undo Log、自适应索引.......)
  4. 计算机主机包括哪两大部分,电脑硬件分为哪几个部分
  5. Kettle使用 js 文件生成节假日表文件 附带2019-2020节假日文件
  6. Win10 使用 Virtual Box 安装 Ubuntu 虚拟机
  7. if while的用法
  8. 高性能MySQL读书笔记(一)
  9. 51Nod1203 2012集训队答辩 JZPLCM
  10. prosody IM cert证书安装