寻找假币问题(二分法)

题目内容

有n个硬币,编号为1~n,其中有一个假币,且假币较轻,如何采用天平称重方式找到这个假币?

可采用如下的分治算法解决这个问题:

  1. 如果n为偶数,则将这n个硬币分成两等份,并将两份硬币放到天平两端,假币在较轻的那端

2, 如果n为奇数,则取出第1个硬币后将其余硬币分成两等份,并将两份硬币放到天平两端

2.1 如果两份硬币的重量相等,则第一个硬币为假币

2.2 否则,假币在较轻的那一端

  1. 对较轻的那份硬币重复进行操作1-2,直到最后只剩下两个硬币了,分别放到天平的两端,轻的那一个就是假币。

输入要求

整数n(3<=n<=1000,表示硬币的数量)及整数m(1<=m<=n,表示假币的序号)

输出要求

按题目给出的算法寻找假币时,天平称重次数

测试数据

输入
10 5
输出
3

参考答案

#include<stdio.h>
#include <iostream>
#include<math.h>
using namespace std;void num(int i ,int j, int n ,int m ,int &count){if (n % 2 == 0){n = n / 2;count++;if (m - 1 <= i + n -1){num( i, i + n - 1, n , m, count);}else{num( i + n, j, n , m, count);}}else{       int q = i + 1;n = (n - 1) / 2;count++;if (m-1 == i){}else if ((m - 1) <= (q + n -1)){if (n == 2){count++;}else{num( q, q + n - 1, n, m, count);}}else {if (n == 2){count++;}else{num( q + n, j, n, m, count);}}}
}
int main(){int n;cin >> n;int m;cin >> m;int count = 0;num(0, n-1, n, m, count);cout << count;system("pause");
}

寻找假币问题(二分法)相关推荐

  1. 算法设计思想(6)— 二分法(二分法代码模板、寻找左侧边界二分法、寻找右侧边界二分法)

    1. 问题 [例题]循环输入,每组数据为给定 n 个元素的升序整型数组 nums 和一个值 target,要求实现一个函数查找 nums 中 target 的下标,如果查找不到则返回 -1. 2. 思 ...

  2. leetcode 162. Find Peak Element | 162. 寻找峰值(二分法找局部最大值)

    题目 https://leetcode.com/problems/find-peak-element/ 题解 2021-7-21 16:28:31 更新版思路: 根据左神在 课上 说的,可以使用二分法 ...

  3. 【算法分析与设计】寻找假币问题

    问题描述:给出27枚硬币,它们的各种外观完全相同,但有一枚硬币稍重一点,是假币,我们只有一杆秤,试找到一种便捷的方法找出假币. 简单直接的思路是:直接从头到尾扫描遍历一趟,找出最大的即可.算法复杂度是 ...

  4. c语言求寻找假币的次数,C语言经典算法 - 八枚银币问题

    C语言经典算法 - 八枚银币问题 说明现有八枚银币a b c d e f g h,已知其中一枚是假币,其重量不同于真币,但不知是较轻或 较重,如何使用天平以最少的比较次数,决定出哪枚是假币,并得知假币 ...

  5. leetcode162. 寻找峰值(二分法)

    峰值元素是指其值大于左右相邻值的元素. 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引. 数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位 ...

  6. leetcode287. 寻找重复数(二分法)

    给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数.假设只有一个重复的整数,找出这个重复的数. 示例 1: 输入: [1,3 ...

  7. 用python解算法谜题_编程的乐趣 用Python解算法谜题

    这是一本介绍通过解决复杂谜题来学习编程的书,书中的代码用Python语言编写.与以往的编程书不同,本书将对代码功能的理解与编程语言语法和语义的理解分离开来,从解每个谜题开始,先给出解谜题的算法,随后用 ...

  8. 16c语言第七届省赛,第十二届全国青少年信息学奥林匹克联赛初赛试题及答案普及组、C语言...

    第十二届全国青少年信息学奥林匹克联赛初赛试题及答案(普及组.C语言)普及组  C语言  二小时完成) 一.单项选择题(共20题,每题1.5分,共计30分.每题有且仅有一个正确答案) 1.在下面各世界顶 ...

  9. 数据结构和算法详解(四)——五大基本算法思想

    更多例子可参考:https://blog.csdn.net/Aidam_Bo/article/details/86715865 一.穷举算法思想 穷 举 算 法 (ExhaustiveA ttack ...

最新文章

  1. 苹果手表可以运行 ruby 脚本了
  2. props写法_好程序员web前端培训React中事件的写法总结
  3. java分布式事务原理_JAVA分布式事务原理及应用
  4. Android绘制自定义控件,Android自定义控件绘制基本图形基础入门
  5. 数据结构实验之二叉树四:(先序中序)还原二叉树
  6. 字节流转化为文件流_JAVA IO分析一:File类、字节流、字符流、字节字符转换流...
  7. EnjoyingSoft之Mule ESB开发教程第六篇:Data Transform - 数据转换
  8. 属性子集选择的基本启发方法_一文看懂数据预处理最重要的3种思想和方法
  9. 浮点数学运算是否被破坏?
  10. android 菜鸟面单打印_Android TSC热敏标签打印机打印
  11. Linux----UnZip命令
  12. 单片机(嵌入式)程序分层架构
  13. base64编码将字符串转换为图片
  14. 【Spring Cloud sunX】中间件容器化部署
  15. redis6源码阅读之八(rax)
  16. ubuntu华硕Z87-plus主板网卡驱动
  17. 傅里叶级数构建信号要求频率有正有负_电子科大学长说—信号与系统考研例题详解重点习题...
  18. 十分钟教你写个软件防火墙!powershell。
  19. python Deformation Transfer for Triangle Meshes
  20. ks检验与s-w 检验_简单的方法教会你,利用SPSS对数据进行正态性检验

热门文章

  1. python类和对象基础详解
  2. My97 DatePicker普通调用
  3. 课后练习03---126字母邮箱注册功能
  4. uni-app 打包H5项目
  5. java 独木桥_独木桥 - pandaB - 博客园
  6. ArchLinux开发环境第2辑——高效平铺式桌面i3个性化配置与美化
  7. js中的的GO和AO
  8. 如何通过Charles+BurpSuite的配合在PC端抓到手机包
  9. ZK Studio 1.0 发布新功能
  10. 考驾照选择 AI 教练,心态稳定不会骂人