小球称重

十二个小球称重问题及其Python实现 一、问题描述   在12个外观完全相同的小球中,有一个与其它球重量不同。如何只用一架天平找到这个球并判断它比其它球轻还是重?最少需要称几次?39个球呢? 二、问题分析   这是一个很经典的信息论问题,最开始的思路是用分组称重的方法,发现每次测量的次数不固定,而且当球数增多时称重次数会明显增加,所以不是次数最优的方法,于是参考了网上编码的方法并做了一点调整。   一共有12个小球,每个小... 阅读详情

假设有9个球和一个天平,其中一个稍微重一些,那么至少要多少次可以找到这个较重的球,并指出较重球的编号。

// BallWeigh.cpp : 定义控制台应用程序的入口点。
/*  时间:2014-3-31
*   作者: Lily Wu
*   功能:实现小球称重
*   思路:首先对小球的重量存在数组中,然后把数组元素分ABC三组,通过比较其中两个数组和的大小来判断重球在哪组中,并对该组重复操作。
*/

#include "stdafx.h"
#include <iostream>
using namespace std;

int BallWeigh(int weigh[],int num);

static int count = 0;
int main()
{
	//存储小球的重量

	int a[] = {1,1,1,1,2,1,1,1,1};
	int num;
	num = BallWeigh(a,9);
	cout << "第"<<num<<"个球较重"<<endl;
	cout << "最少需要称"<<count << "次"<< endl;
	return 0;
}

int BallWeigh(int weigh[],int num)
{
	count ++;
	int index;
	// 分成三组
	int num1 = num/3;
	int arrary1 = 0;
	int arrary2 = 0;
	int arrary3 = 0;
	int temp;
	int i = 0;
	// 求各组小球的质量和
	for( i = 0; i < num1 ; i ++)
	{
		arrary1 += weigh[i];
		arrary2 += weigh[i + num1];
		arrary3 += weigh[num - 2*num1]; //数组的长度必须是常量或常量表达式,不能为动态变量
	}

	int *arrary = new int[num1];

	// 比较确定较重小球在哪组  当arrary1 = arrary2时,说明在arrary3中
	if(arrary1 > arrary2)
	{
		temp = 0;
	}
	else if(arrary1 == arrary2)
	{
		temp = 2;
	}
	else
	{
		temp = 1;
	}

	// 如果每组元素为1个,则直接输出元素号码 这个为递归结束条件
	if(num1 == 1)
		index = 1 + temp;
	// 把较重组的元素存入新的数组中,以便下次递归使用
	else
	{

		for(i = 0;i < num1;i++)
		{
			arrary[i] = weigh[i + temp*num1];
		}

		index = BallWeigh(arrary,num1) + temp*num1;
	}

	delete[] arrary;
	return index;
}




此方法具有一定的局限性,当球的个数不是3的个数不适用,但基本思路相同。

小球称重的解法整合 N个小球有一个坏球,最少几次能找出坏球 小球称重的解法整合 N个小球有一个坏球,最少几次能找出坏球     最近在看小球称重的问题,之前只记住了公式,最近回过来看,发现知乎上多了一些优质答案,遂记录一下。     现附上学习地址     先说结论, N 个乒乓球中有一个和其他的质量不同,用天平最少几次一定能称出来?(并知道是轻了还是重了) n次操作最多能解决以下个数的问题 3n−32 \frac{3^n-3}{2} 23n−3 阅读详情

相关推荐

12小球称重问题

题目:已知有12个小球,一样的形状和外观,其中有一个是次品,现在给你一个无砝码的天平,称三次,把这个次品找出来,并且求出这个次品相对真品是偏重还是偏轻?解答:首先把小球分成三堆,每堆四个。          A:(1,2,3,4)    B:(5,6,7,8)    C:(9,10,11,12)情况 一:1 第一称重随便拿出两堆来称, 这里不妨假设拿出A和B              

anikan_yu的专栏 6284

称球问题解析(1)- 12球

称球问题详解

Phill King的专栏 2727

小球称重问题

问题重述 给定n枚硬币,其中有一枚假币,它与真币重量不同,但不知道是轻还是重。现有一个无砝码的天平,问要找出假币,并确认假币至少要称几次,并给出可视化编程。 问题分析此问题是经典的信息论算法问题,许多大公司都曾以此作为面试、笔试题来考核员工。结合信息论的观点来看,每一次的称量,都会带来三种可能的结果,左边重、右边重、一样重。给我们将带来log_2⁡3,大约是1.58bit。n个球有一个不一样,那么

小小随笔屋 6073

no.3_九球称重

有9个球,其中8个球质量相同,有1个球比较重。要求用2次天平,找出比较重的那个球。 解答: 分成三组,选择两组进行称重,如果相等,则另外一组就是有重的那一颗,然后将这一组进行分成三个,然后选择其中两个称重,如果相等,则另外一颗为重的球。其他可能性就不用说了吧!!! ...

乔治大哥的博客 867

python小球方案问题_十二个小球称重问题及其Python实现

一、问题描述在12个外观完全相同的小球中,有一个与其它球重量不同。如何只用一架天平找到这个球并判断它比其它球轻还是重?最少需要称几次?39个球呢?二、问题分析这是一个很经典的信息论问题,最开始的思路是用分组称重的方法,发现每次测量的次数不固定,而且当球数增多时称重次数会明显增加,所以不是次数最优的方法,于是参考了网上编码的方法并做了一点调整。一共有12个小球,每个小球都可能偏轻或偏重,共有24种可...

weixin_42393576的博客 1733

12个小球称重量问题(C代码)

12个外表一模一样的小球,其中有一个重量和其他11个不同,怎样只用3次天平将这个小球找出来? /*author:cifry*//*platform:VC++6.0*/#include#include#include#includeFILE *fp;/*该函数模拟一架天平,它的第一个参数为天平某边放的砝码数,且砝码量左边等于右边之后的参数为各砝码,它们从左到右

哭泣的气球 6422

12球称重问题

问题: 12个外表一样的小球,有11个球重量相同,另1个球为“坏球”,可能比较重,也可能比较轻。 如何利用天平称重3次来找出这个“坏球”? 分析: 12个球中的某一个球为坏球,该事件的信息熵 H1H_1 即为 ∑12112−log(112)=log(12)\sum^{12} \dfrac{1}{12}-log(\dfrac{1}{12})

沧海桑田 5831

Comsol 压电换能器声场仿真(远场分析、边界元法优化)

本文详细介绍了在Comsol中使用边界元法进行压电换能器远场声场仿真的高效方法。针对传统有限元法计算远场时内存消耗大、耗时长的问题,文章阐述了边界元法在处理无限域、提升计算效率和精确获取远场指向性方面的核心优势,并提供了从多物理场耦合设置、网格划分策略到求解器配置及结果验证的完整实战指南。

weixin_29045585的博客 408

信息熵--硬币称重问题-详解

在补《信息熵基础》,此书理论清晰,后面还有一堆要命的习题,加深理解和应用,实乃佳作。其中一些题目对我来说确实不易,记录巩固一下,也和大家交流一下。 文章目录一、硬币称重问题描述二、解答2.1第一问2.2第二问2.1.1第一次称重方案2.1.2 最后一次称重方案2.1.3 第二次称重方案2.1.3.1 相等2.1.3.2 不相等三、总结四、参考文献 一、硬币称重问题描述 n枚硬币,可能有一枚假币,...

mantoureganmian的专栏 1万+

新版股票配资系统源码/股票分析系统技术方案

新版股票配资系统;全套源码支持新股申购功能,包含C#+MySQL开发的后台系统及Spring框架,采用C/S架构。注意:本源码仅限技术学习、功能测试及模拟交易使用,严禁用于非法用途,违者责任自负。

q318136906的博客 1644

手把手教你搭建基于Springboot+Vue的酒店管理系统

友友们,又是好久没更新了,马上元旦了,要迈入2025蛇年了,提前祝大家蛇年快乐,学有所成,本文博主将带领大家使用Springboot和Vue搭建一个酒店管理系统,受限于本文篇幅内容,本文罗列仅有部分简单示例内容,主要包括前后端示例源码。通过本文,你将大致掌握如何快速搭建一个现代化的Web应用。如果您想学习完整开发方案,包括项目源码+数据库文件+全套环境资源+代码部署视频教程+开发文档】获取学习资源,支持远程安装调试:一、项目背景随着互联网技术的不断发展,酒店行业对信息化的需求越来越高。

暴力码农的博客 1324

蓝桥杯2022年第十三届决赛真题-小球称重

(本题利用取交集,并集的方法,最后获得嫌疑的小球个数)‘>’ 代表左边比右边重,‘

wlkq的博客 605

使用Typora时LaTeX内联公式简单汇总

0、前言 在使用Typora写笔记时,有时候需要添加上LaTeX排版的公式。以下是整理出的一份简单笔记,方便记忆不清楚时查阅。笔记暂时不够完善,之后再补充。 注:有些公式语法KateX不能解析,但在Typora中可以使用(不用在意) 1、一些基本内联公式 位置关系 展示 LaTeX 说明 x2x^{2}x2 x^{2} 右上标 x2x_{2}x2​ x_{2} 右下标 2x{}^{2}x2x {}^{2}x 左上标 2x{}_{2}x2​x {}_{2}x 左下标

白白旧维的博客 4444

个人小项目:现有12个小球和一个天平,小球中有一个重量与其它的不同,称重几次能将这个小球找出来

个人小项目:现有12个小球和一个天平,小球中有一个重量与其它的不同,看你称重几次能将这个小球找出来 模拟称重过程,JS,JQUERY 使用HTML的自定义属性,创建对象数组--jQuery数组和字符串,创建对象数组--jQuery数组和字符串,Jquery中click事件重复执行的问题 Javascript和JQuery中常用的随机数产生函数 编程初心者

liuajiehe1234567的博客 3455

【顾邦小讲堂】第十九期 RC Snubber吸收电路详解:抑制MOSFET振铃现象与过冲的设计技巧!

通过RC Snubber电路有效抑制MOSFET DS端的过冲及振铃现象,帮助工程师们在设计中提升电路的稳定性和可靠性

GBupupup的博客 3789

在windows10/11中使用ipatool提取苹果app安装包ipa文件

本文介绍了在Windows10/11系统中使用ipatool工具下载苹果App安装包(.ipa)的详细步骤。首先需准备Windows电脑、AppleID账号并下载ipatool工具;具体操作包括:登录AppleID、搜索应用、获取购买授权、查看历史版本及下载指定版本。关键步骤强调获取授权的重要性,并提供了常用命令速查表,帮助用户完成从登录到下载的全过程。该教程适用于需要获取旧版本App或进行应用测试的场景。

zhengshaolin128的博客 2590

二分查找之天平称重,称出最重的小球

题目:有n个小球,其中有一个比其他的都要重,已知有一个天平,怎么用最少的次数把小球找出来? 个人代码如下: #include #include using namespace std; int GetAbnormalBall(int a[], int begin, int end, int &count) { if(begin == end) return a[begin];

hepeng1341022的专栏 1659

Ta-Lib源码解析(三):蜡烛图指标 (Candlestick Indicator) #(附Python重构代码和示意图)(补充中)

蜡烛图指标为识别K线形态的指标,笔者认为重点在于定义方式所提供的思路,背后的投资逻辑可以借鉴但不建议直接参考文档的翻译内容和源码逻辑存在不一致的现象,笔者分别列出中文百科中的定义和源码实际逻辑,供大家参考技术分析理论中的一些模糊词,ta-lib中给出了精确的定义源码

量化就是探索生活 3254

Java实现十二个小球称重问题

之前写过一篇关于小球称重的博客,这里不再赘述小球称重问题的逻辑分析过程,直接上代码。 View Code 1 import java.util.Random; 2 3 /** 4 * java实现十二个小球称重问题 5 * @author tschengbin 6 * 7 */ 8 public class Compar...

weixin_33721344的博客 304

UDS自动化测试-Service 0x27(CAPL调用dll实现key计算)

相信读者基于Diagnostic/ISO TP Confighration中cdd、dll文件的测试并不陌生,本文基于其的基础上,介绍在capl中调用内置的函数diagGenerateKeyFromSeed实现27服务解锁,从而进行诊断自动化测试。本文基于4个byte的Seed、16个byte的Key的安全访问,实现27服务的自动化测试。需要加载项目使用的cdd文件,如果没有的情况下可以使用canoe例程中默认的cdd文件。

诊断协议那些事儿's blog 2054

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【Java实践】十二小球天平三次称重问题

十二个小球用天平三次称重找出其中唯一一个质量不同(或轻或重)的小球,用java代码实现。 思路: 将十二个小球分别标记为A,B,C,D,E,F,G,H,I,J,K,L,将它们以四个为一组分为三组也就是:第一组:ABCD;第二组:EFGH;第三组:IJKL。 首先我们考虑将第一组和第二组放置在天平两端进行称重(第一次称重),根据称重的结果可分为两种情况:相等和不

猫球球的博客 6751

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

12球称重C语言算法,12小球称重问题

题目:已知有12个小球,一样的形状和外观,其中有一个是次品,现在给你一个无砝码的天平,称三次,把这个次品找出来,并且求出这个次品相对真品是偏重还是偏轻?解答:首先把小球分成三堆,每堆四个。A:(1,2,3,4)B:(5,6,7,8)C:(9,10,11,12)情况 一:1 第一称重随便拿出两堆来称, 这里不妨假设拿出A和BA(1,2,3,4)------------------------B(5...

weixin_39983404的博客 890

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: C++ 中rand()总结
下一篇: 魔术师的秘密
LilyWu_coding
博客等级 码龄15年 3粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值