有一堆共n枚硬币,其中一枚是假币,外观上无法区分,只知道假币的重量稍轻。要求仅使用一个天平,使用最少的重量比较次数找出假硬币。

将n个硬币分成数量相同的两堆,如果n为偶数,每堆的硬币个数为n/2;

如果n为奇数,每堆的硬币个数为(n-1)/2,两堆之外还会剩余一个硬币。

将两堆硬币上天平比较重量,如果有一堆较轻,那么假的硬币必然在轻的那一堆中。如果两堆硬币重量相等,且两堆之外有一个剩余硬币,则那个剩余硬币就是假硬币。如果两堆硬币重量相等,且两堆之外没有剩余硬币,则查找任务失败,未发现假硬币。

编写函数findFalseCoin(coins,start,n)并调用

实现"在读入的coins列表中,从下标start开始的n个硬币中查找假硬币"

【输入形式】
【输出形式】
【样例输入】

100,100,100,99,100,100,100,100,100

【样例输出】

Fake coin:3

【样例说明】

【评分标准】

# -*- coding: utf-8 -*-
"""
Created on Fri Oct 28 18:26:19 2022@author: hp
"""def weightcal(coins,left,right):sum=0for i in range(left,right):sum+=coins[i]w=sum/(max(right-left,1))return w
global countdef findFalseCoin(coins,start,end):count=0if(start>=end ):return startelse:w_left=weightcal(coins,start,int( (end+start)/2)  )# print(w_left)w_right=weightcal(coins,int( (end+start)/2),end)# print(w_right)if (w_left==w_right ):return -1elif(w_left<=w_right):index=findFalseCoin(coins,start,int( (end+start)/2))  elif(w_left>=w_right):index=findFalseCoin(coins,int( (end+start)/2),end)return indexcoins=list(map(eval,(input().split(','))))
n=findFalseCoin(coins,0,len(coins))
if n==-1:print("Fake coin is not found")
else:print("Fake coin:{}".format(n))

有一堆共n枚硬币,其中一枚是假币,外观上无法区分,只知道假币的重量稍轻。要求仅使用一个天平,使用最少的重量比较次数找出假硬币。相关推荐

  1. 现在有12枚硬币,其中有一枚有问题,不知道其是重了还是轻了,只有一个天平,可以测量三次,找出有问题的硬币。

    现在有12枚硬币,其中有一枚有问题,不知道其是重了还是轻了,只有一个天平,可以测量三次,找出有问题的硬币. 关于这个题,看了一下网上的资料,感觉答案不全或是不够好,写了一个Xmind,可能看起来好理解 ...

  2. 假币问题:有n枚硬币,其中有一枚是假币,已知假币的重量较轻。现只有一个天平,要求用尽量少的比较次数找出这枚假币。

    2017年软件设计师上半场下午题目 [说明] 假币问题:有n枚硬币,其中有一枚是假币,已知假币的重量较轻.现只有一个天平,要求用尽量少的比较次数找出这枚假币. [分析问题] 将n枚硬币分成相等的两部分 ...

  3. 12个球,其中一个和其他的重量不一样,有一个天平,最多几次找出这个球

      12个球,其中一个和其他的重量不一样,有一个天平,最多几次找出这个球 将球编号,分成3组,1234  5678  9101112 第一次将1234,5678放在天平的两边 如果平衡,则坏球在910 ...

  4. 写几个函数: ①输入10个职工的姓名和职工号; ②按职工号由小到大顺序排序,姓名顺序也随之调整; ③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。

    写几个函数: ①输入10个职工的姓名和职工号: ②按职工号由小到大顺序排序,姓名顺序也随之调整: ③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名. #i ...

  5. 对K个不同字符的全排列组成的数组, 面试官从中随机拿走了一个, 剩下的数组作为输入, 请帮忙找出这个被拿走的字符串?

    对K个不同字符的全排列组成的数组, 面试官从中随机拿走了一个, 剩下的数组作为输入, 请帮忙找出这个被拿走的字符串? 比如["ABC", "ACB", &quo ...

  6. 编写一个汇编语言程序,有一个50个数据的数据区,找出最大数和最小数,分别存放在AX和BX寄存器中

    [微机原理]-汇编题 编写一个汇编语言程序,有一个50个数据的数据区,找出最大数和最小数,分别存放在AX和BX寄存器中. DATA SEGMENT NUM DB 21H,34,23H...DATA E ...

  7. python counter 出现次数最少的元素_[PY3]——找出一个序列中出现次数最多的元素/collections.Counter 类的用法...

    问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案 c ...

  8. 最少次数找出重量最轻的苹果(面试智力题)

    有70个苹果和一个天秤,70个苹果中只有一个苹果的重量比其他苹果轻,如何用最少次数使用天秤找出这个苹果. 首先我们会想到的是二分法,最坏的情况下,70个苹果左右分成35.35(第一次),然后35左右分 ...

  9. leetcode C++ 28. 实现 strStr() 实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 need

    一.C++ class Solution { public:int strStr(string haystack, string needle) {if (needle.size() == 0)ret ...

最新文章

  1. Oracle VS DB2 数据类型
  2. Briefings in Bioinformatics:微生物基因组学和功能基因组学相关软件和数据库的研究进展
  3. iOS 模糊化效果 ANBlurredImageView的使用
  4. 千万不要在深夜提交代码
  5. Webdriver使用Chrome模拟手机浏览器测试移动版网站
  6. Dotnet中Span, Memory和ReadOnlySequence之浅见
  7. 【CF#931.B】World Cup (思维,模拟)
  8. 软件测试除了边界值还有什么,在软件测试中,假定 X 为整数,10≤X≤100,用边界值分析法,那么 X 在测试 中应该取( )边界值...
  9. python专业方向 | 文本相似度计算
  10. 《社交网站界面设计(原书第2版)》——1.12 传感器在交互中的作用
  11. Java 继承 小练习
  12. php小总结之 mysqli面向过程、面向对象和PDO在增删改查使用中的一些小区别
  13. 控制台打印vue实例
  14. vue项目打包成app
  15. 免费好用的的在线代码IDE网站,支持python
  16. Pajek常用方法保姆级操作指南——社会网络分析
  17. PMBOK(第六版) 学习笔记 ——《第五章 项目范围管理》
  18. Python——类和实例
  19. oracle定时任务实例
  20. 【北邮国院大二下】产品开发与营销知识点整理 Topic11

热门文章

  1. 如何将android studio设置复位,将设置恢复到初始化
  2. JavaScript技术地图,助你走向人生巅峰
  3. 爬虫首战之豆瓣喜剧电影
  4. 网络安全危害有哪些?如何应对网络安全?
  5. JS中arguments对象的属性-callee详解
  6. CAD梦想画图中的“剪切命令”
  7. linux 窗口管理器_i3窗口管理器使Linux更好的5个原因
  8. 文档管理系统,你用了吗?
  9. 力扣sql入门篇(五)
  10. 电脑为什么会卡、CPU和内存的重要性、选哪个好呢?