有一堆共n枚硬币,其中一枚是假币,外观上无法区分,只知道假币的重量稍轻。要求仅使用一个天平,使用最少的重量比较次数找出假硬币。
有一堆共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枚硬币,其中一枚是假币,外观上无法区分,只知道假币的重量稍轻。要求仅使用一个天平,使用最少的重量比较次数找出假硬币。相关推荐
- 现在有12枚硬币,其中有一枚有问题,不知道其是重了还是轻了,只有一个天平,可以测量三次,找出有问题的硬币。
现在有12枚硬币,其中有一枚有问题,不知道其是重了还是轻了,只有一个天平,可以测量三次,找出有问题的硬币. 关于这个题,看了一下网上的资料,感觉答案不全或是不够好,写了一个Xmind,可能看起来好理解 ...
- 假币问题:有n枚硬币,其中有一枚是假币,已知假币的重量较轻。现只有一个天平,要求用尽量少的比较次数找出这枚假币。
2017年软件设计师上半场下午题目 [说明] 假币问题:有n枚硬币,其中有一枚是假币,已知假币的重量较轻.现只有一个天平,要求用尽量少的比较次数找出这枚假币. [分析问题] 将n枚硬币分成相等的两部分 ...
- 12个球,其中一个和其他的重量不一样,有一个天平,最多几次找出这个球
12个球,其中一个和其他的重量不一样,有一个天平,最多几次找出这个球 将球编号,分成3组,1234 5678 9101112 第一次将1234,5678放在天平的两边 如果平衡,则坏球在910 ...
- 写几个函数: ①输入10个职工的姓名和职工号; ②按职工号由小到大顺序排序,姓名顺序也随之调整; ③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。
写几个函数: ①输入10个职工的姓名和职工号: ②按职工号由小到大顺序排序,姓名顺序也随之调整: ③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名. #i ...
- 对K个不同字符的全排列组成的数组, 面试官从中随机拿走了一个, 剩下的数组作为输入, 请帮忙找出这个被拿走的字符串?
对K个不同字符的全排列组成的数组, 面试官从中随机拿走了一个, 剩下的数组作为输入, 请帮忙找出这个被拿走的字符串? 比如["ABC", "ACB", &quo ...
- 编写一个汇编语言程序,有一个50个数据的数据区,找出最大数和最小数,分别存放在AX和BX寄存器中
[微机原理]-汇编题 编写一个汇编语言程序,有一个50个数据的数据区,找出最大数和最小数,分别存放在AX和BX寄存器中. DATA SEGMENT NUM DB 21H,34,23H...DATA E ...
- python counter 出现次数最少的元素_[PY3]——找出一个序列中出现次数最多的元素/collections.Counter 类的用法...
问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案 c ...
- 最少次数找出重量最轻的苹果(面试智力题)
有70个苹果和一个天秤,70个苹果中只有一个苹果的重量比其他苹果轻,如何用最少次数使用天秤找出这个苹果. 首先我们会想到的是二分法,最坏的情况下,70个苹果左右分成35.35(第一次),然后35左右分 ...
- leetcode C++ 28. 实现 strStr() 实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 need
一.C++ class Solution { public:int strStr(string haystack, string needle) {if (needle.size() == 0)ret ...
最新文章
- Oracle VS DB2 数据类型
- Briefings in Bioinformatics:微生物基因组学和功能基因组学相关软件和数据库的研究进展
- iOS 模糊化效果 ANBlurredImageView的使用
- 千万不要在深夜提交代码
- Webdriver使用Chrome模拟手机浏览器测试移动版网站
- Dotnet中Span, Memory和ReadOnlySequence之浅见
- 【CF#931.B】World Cup (思维,模拟)
- 软件测试除了边界值还有什么,在软件测试中,假定 X 为整数,10≤X≤100,用边界值分析法,那么 X 在测试 中应该取( )边界值...
- python专业方向 | 文本相似度计算
- 《社交网站界面设计(原书第2版)》——1.12 传感器在交互中的作用
- Java 继承 小练习
- php小总结之 mysqli面向过程、面向对象和PDO在增删改查使用中的一些小区别
- 控制台打印vue实例
- vue项目打包成app
- 免费好用的的在线代码IDE网站,支持python
- Pajek常用方法保姆级操作指南——社会网络分析
- PMBOK(第六版) 学习笔记 ——《第五章 项目范围管理》
- Python——类和实例
- oracle定时任务实例
- 【北邮国院大二下】产品开发与营销知识点整理 Topic11