有一堆共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. linux中登录类型及配置文件
  2. Android怎么不显示手机模型,以编程方式获取Android手机模型
  3. [原]五分钟搭建gitserver
  4. Hdu 2522 hash
  5. 线性表(一)——顺序表
  6. 百度2011招聘笔试题+答案解析
  7. 解惑(三)----- 深入理解Python中的self参数和__init__(self)方法--通过类比Java语言
  8. 修改系统默认路径,如收藏夹、桌面、我的文档
  9. ASP.NET中 CheckBox(复选框)的使用
  10. Spring MVC-学习笔记(1)认识spring mvc
  11. 31、Arrays数组排序(续)——自定义排序
  12. android按钮添加音效,Android中为按钮设置点击音效
  13. Tmux_Hotkey
  14. 羊了个羊, 听说这游戏很难
  15. 永不停息的红舞步一个电子工程师的心路历程(转载)
  16. 天津达内可靠么 老员工揭秘真实的达内教育
  17. 换了5G手机不会用5G网络?赶快来补课!
  18. 关于西瓜视频加密算法的总结
  19. 开发板网线直连电脑的设置方法且能上网
  20. 【JavaScript 教程】浏览器—window 对象

热门文章

  1. CLM、CESM错误篇:ERROR: Need to provide valid mapping file between glc and lnd in xml variable ......
  2. 资深程序员面试的五大经验分享,顺利走向人生巅峰
  3. 惊!AI国家领导人来啦?每人每月先发个13700美元!
  4. Microsoft.SqlServer.Management.Sdk.Sfc, Version=12.0.0.0, Culture=neutral, .....
  5. Java实现简单爬虫——爬取疫情数据
  6. Twitter推荐算法总架构和算法说明
  7. Arcgis 坐标系统的识别与处理
  8. SSL证书使用的端口号通常默认是多少
  9. 让状态栏上有显示电池电量百分比
  10. 博睿数据入选首批欧拉技术测评方案,为欧拉生态开发者应用体验保驾护航