<IQ题>最少次数找出有质量问题的球

本文详细解析了如何利用三次天平称重找出一个未知重量差异的球,并判断其是重了还是轻了。通过给球编号,采用分组对比的方法,成功解决了这一经典面试题。

Q:有12个球,其中一个是坏球。不知道坏球比其他球重还是轻。给你一个无砝码的天枰。要求称三次称出那个坏球,问如何称?

  


这题听说是微软的面试试题,基本给你5~30分钟答出来.其实要找出哪个球有问题三次算简单了,但是要加上判定出是那个球是重了还是轻了这就要深一层考虑了..



























A:   给球分别编号  1~12号.

第一次: 1  2  3  4  和  5  6  7  8摆上天平对比.

                         ①相等=.     这就说明有问题的球在 9  10  11  12这四个里面,其他球1~8都是标准质量(标准质量的球都用绿色表示)

                                      第二次:  9   10    和     11  1  对比

                                                   ①相等= :证明有问题的球就是12号啊

                                                              第三次: 和  12   对比.   相等= :这是不可能的.

                                                                             ①左倾>:  12 轻了.

                                                                             ②右倾<:  12 重了

                                                   ②左倾>: 这就说明要么是9   10重了(这里只要有可能重了我都用红色表示),,, 要么就是11 轻了(有可能轻了的用蓝色表示)

                                                                第三次:9    11和  1    2   对比

                                                                            ①左倾>:  9  重了.

                                                                            ②右倾<:  11 轻了

                                                                             ③相等=:  10重了

                                                   ③右倾<: 这就说明要么是11重了,, 要么就是9   10 轻了

                                                                第三次:9    11和  1    2   对比

                                                                            ①左倾>:   9   轻了

                                                                            ②右倾<:  11  重了

                                                                             ③相等=:  10 轻了


                         ②左倾>      这就说明要么是1  2  3  4重了(这里只要有可能重了我都用红色表示),,, 要么就是5  6  7  8 轻了(有可能轻了的用蓝色表示)

                                       第二次:1  2   5    3   4    6   

                                                      ①左倾>: 说明要么是1   2重了,,, 要么就是6 轻了

                                                                     第三次:1   6和  9    10   对比

                                                                                    ①左倾>:  1  重了.

                                                                                    ②右倾<:  6 轻了

                                                                                    ③相等=:  2重了

                                                     ②右倾<:  说明要么是3   4重了,,, 要么就是轻了

                                                                     第三次:3   5和  9    10   对比

                                                                                    ①左倾>:  3  重了.

                                                                                    ②右倾<:  5 轻了

                                                                                    ③相等=:  4重了

                                                    ③相等=: 问题球在7  8

                                                                     第三次:7和  9   对比     左倾是不可能的.

                                                                                    ①右倾<:  7 轻了.

                                                                                    ②相等=:  8 轻了.

                           ③右倾<      这就说明要么是1  2  3  4轻了,, 要么就是5  6  7  8 重了

                                       第二次:1  2  5     3   4    6   

                                                               跟上面一样的方法,讲红色和蓝色反过来就可以了我懒得写那么多了


上面总过8+8+8=24个的可能结果都列出来了,意思就说,12个球的任一个球轻了或重了都在上面有;路线可以到达.

当做IQ题来处理还好,但是万一把数据改了,又要浪费很多时间了.所以比如问你13个球,至少要用几次才能找出来呢?


13个球就26种情况.照一次天平对比能有   >   =   <  这三种情况.

但遗憾的是并不是3³=27所以三次也能解决(你试给我看...



算法研究:

球一开始并不知道他们的基本状态的..需要使用比较才能给他们"附上颜色"(是可能轻了还是可能重了)


两个球有一个坏了.要用多少次去找出那个球并判断他轻了还是重了.(编号球1和球2)

1 和 2 比较是毫无意义的.好吧我提供标准球3~max

  1  和   3   对比,如果①:>的话是1重了.②<:1轻了.③:=的话是2号有问题,但不知道2号是轻了还是重了.

结论:对于两个没有状态的球,要1次能找出,但可能要2次才能判断轻重.

假如 1   2呢?  和    对比.①:<的话是1轻了.②=的话是2轻了 (同样适用1  2)

假如 1   2呢?  和    对比.①:<的话是1轻了.②=的话是2重了. (同样适用1 2)

结论:对于两个有状态的球,1次能找出并且判断轻重.

三个球有一个坏了.要用多少次去找出那个球并判断他轻了还是重了.(编号球1  2  3)

1 和 2 比较...①:>的话是1重了或者2轻了..②<:1轻了或者2重了.③:=的话是3号有问题,但不知道3号是轻了还是重了

没标准球啊,坑,给出标准球

1  2 和   4  5   对比,如果①:>的话是1  2重了.②<:1   2轻了.③:=的话是3号有问题,但不知道3号是轻了还是重了.

结论:对于三个没有状态的球,至少要1次能找出,要2次才能判断轻重.

假如 1   2  3呢?  和  2  对比.①:<的话是1轻了.②:>的话2轻了.③=的话是3轻了

假如 1   2  3呢?  和  3   对比.①:<的话是1轻了.:>的话3轻了.③=的话是2

结论:对于三个有状态的球,1次能找出并且判断轻重.

四个球有一个坏了.要用多少次去找出那个球并判断他轻了还是重了.(编号球1  2  3  4)

1  2  和  3  4对比毫无意义.

1  和 2  对比,剩下3  4 就跟两个球一样.(两次才能找出)

1  2  和  3  5  对比,①=的话4有问题. ②>的话 1  2 3  4 ③<的话 1  2   4 .套用上面的三球(两次才能找出并判断)

结论:对于四个没有状态的球,至少要1次能找出,要2次才能判断轻重.

假如 1   2  3  4呢? 1  2  和  3  5  对比.①:<的话是1  2轻了.②:>的话是3轻了.③=的话是4轻了(四种可能性,一次只能实现三种呢)

假如 1   2  3  4呢?  2和  3  5对比.①:<的话是1轻了.②:>的话是2重了 或3轻了.③=的话是4轻了(同上

假如 1   2  3  4呢? 哎不说了跟上面一样.

假如1  2  3  4呢? 呵,这种事三个球的范畴不是我的事.

结论:对于四个有状态的球,2次能找出并且判断轻重.




就不再写下去了,估计都想得出了.先推一下我们的12个球是怎么管理的.

总共有三次机会可以称,简单来说,最后一次必须只能是三种可能性.

就是说倒数第二次可以有9种可能性.

就是说倒数第三次可以有27种可能性(咦,哪里不对)

可惜,你需要使用一次来给他附上状态!!!

附状态这种仪式,只有两个结果.......一:成功知道哪些是标准,哪些是可能重了,还有可能轻了.  二:附魔失败,但是知道问题出现在哪.

举个例子:   1    2   3   三个球.

符状态:  1   和   2 比较,   .①:<的话:符状态成功,1  2  3~~~②:>的话是符状态成功1   3~~~.③=的话,符状态失败.但是问题就出现在3号上

简单易懂

.

12个球怎么三次分出有问题的!!

第一次:符状态:  成功的话就是 [1  2  3  4]  [5  6  7  8] [9  10  11  12]   (以8种可能性进入能容纳9种结果的第二次分配)

                                       8个有状态的数,分成三堆~ [1  2  5 ]   [3  4 ]  [7 8]   (无论结果是哪一堆,可能性只有2~3,进入第三次分配)

                            失败的话就是=号的时候,但是知道问题出现在[9  10  11  12]    (以8种可能性进入能容纳9种结果的第二次分配)

                                      继续符状态:成功的话就是[9]  [10]  [11  12](以2种可能性进入能容纳3种结果的第三次分配)

                      失败的话就是=号的时候,但是知道问题出现在[11  12] 有问题.(这种有四种结果不可取)

                         应该改为这样比较[9 10] [1  11]  [12]  (以3种可能性进入)

                                 失败的话就是[12]的问题,2种可能性...~~~~~~


______________________________________________________________________________________________

问:如果是13个球呢????

第一次:     附状态  5   5    3          (10种可能性 ) 

                               4   4    5    (8种可能性)  失败时10种可能性.

     不说下去了额,毫无疑问,要4次才能呀.

     所以说并不是3³=27>13个球的26种情况就可以了呢.



顺带一说,4次的话就是进入第二次时的容量是27的说. 就是说,你可以这样  13  13  13分配

                                     就是说...............39个球都是能只用4次就可以称出来了..

                                                               120个球只用称5次就能找出有问题的球了


<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository>D:/Program Files/Java/Maven-Repository</localRepository> <mirrors> <mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/repositories/central/</url> </mirror> <mirror> <id>jboss-public-repository-group</id> <mirrorOf>central</mirrorOf> <name>JBoss Public Repository Group</name> <url>http://repository.jboss.org/nexus/content/groups/public</url> </mirror> <mirror> <id>nexus-yaao</id> <mirrorOf>*</mirrorOf> <name>Nexus yaao</name> <url>http://10.1.40.88:8081/repository/maven-public/</url> </mirror> </mirrors> <!-- 配置私服仓库用户名密码,用于项目开发者将共享jar安装到私服仓库--> <servers> <server> <id>yaao-unit</id> <username>admin</username> <password>admin123</password> </server> <server> <id>yaao-bases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>yaao-project</id> <username>admin</username> <password>admin123</password> </server> <server> <id>maven-releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>maven-snapshots</id> <username>admin</username> <password>admin123</password> </server> </servers> <profiles> <profile> <id>nexus</id> <repositories> <repository> <releases>                           <enabled>true</enabled>                       </releases> <snapshots> <enabled>true</enabled> </snapshots> <id>nexus-yaao</id> <name>Nexus yaao</name> <url>http://10.1.40.88:8081/repository/maven-public/</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <releases>                           <enabled>true</enabled>                       </releases> <snapshots> <enabled>true</enabled> </snapshots> <id>nexus-yaao</id> <name>Nexus yaao</name> <url>http://10.1.40.88:8081/repository/maven-public/</url> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <activeProfile>nexus</activeProfile> </activeProfiles> </settings>
08-28
### 本地仓库配置 在 `settings.xml` 文件中,可以通过 `localRepository` 元素指定本地仓库的路径。默认情况下,Maven 会在用户的主目录下创建一个 `.m2/repository` 目录作为本地仓库。如果需要更改这个路径,可以在 `settings.xml` 文件中添加如下配置: ```xml <settings> <localRepository>/path/to/your/local/repo</localRepository> </settings> ``` 这里 `/path/to/your/local/repo` 是你希望使用的本地仓库路径 [^2]。 ### 镜像配置 Maven 可以通过配置镜像来替代默认的中央仓库,这对于提高下载速度非常有用。例如,配置阿里云的镜像可以显著提升国内用户的下载速度。在 `settings.xml` 文件中,可以通过 `mirrors` 元素来配置镜像: ```xml <settings> <mirrors> <mirror> <id>aliyun</id> <mirrorOf>central</mirrorOf> <url>http://maven.aliyun.com/repository/public</url> </mirror> </mirrors> </settings> ``` 这里的 `id` 是镜像的唯一标识符,`mirrorOf` 指定了要镜像的仓库 ID,这里是 `central`,表示中央仓库。`url` 是镜像的地址 [^4]。 ### 服务器认证信息 当需要访问受保护的远程仓库时,可以在 `settings.xml` 文件中配置服务器的认证信息。这通过 `servers` 元素完成: ```xml <settings> <servers> <server> <id>myserver</id> <username>myuser</username> <password>mypass</password> </server> </servers> </settings> ``` 这里的 `id` 应该与 `pom.xml` 或 `settings.xml` 中 `repositories` 配置的 `id` 相匹配,`username` 和 `password` 分别是访问该仓库所需的用户名和密码 [^2]。 ### 使用配置文件 Maven 的 `settings.xml` 文件还支持 `profiles` 配置,用于定义不同的构建环境配置。这些配置可以包括仓库、插件仓库、属性等。`profiles` 在 `settings.xml` 中的作用是全局的,优先级高于 `pom.xml` 中的 `profiles`: ```xml <settings> <profiles> <profile> <id>dev</id> <repositories> <repository> <id>central</id> <url>https://repo.maven.apache.org/maven2</url> </repository> </repositories> </profile> </profiles> </settings> ``` 在这个例子中,`id` 为 `dev` 的 `profile` 定义了一个仓库,其 `id` 为 `central`,指向了 Maven 的中央仓库。这样的配置可以用来切换不同的构建环境,如开发环境、测试环境和生产环境等 [^3]。 ### 激活配置文件 可以通过 `activeProfiles` 元素来激活特定的 `profile`。这在 `settings.xml` 文件中配置如下: ```xml <settings> <activeProfiles> <activeProfile>dev</activeProfile> </activeProfiles> </settings> ``` 这里的 `dev` 是之前定义的 `profile` 的 `id`,表示激活这个 `profile`。如果需要激活多个 `profile`,可以在 `activeProfiles` 元素中添加多个 `activeProfile` 子元素 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值