蓝桥杯 真题 测试次数(详解)

蓝桥杯 真题 测试次数(详解)

测试次数
x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。
各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通。x星球有很多高耸入云的高塔,刚好可以用来做耐摔测试。塔的每一层高度都是一样的,与地球上稍有不同的是,他们的第一层不是地面,而是相当于我们的2楼。如果手机从第7层扔下去没摔坏,但第8层摔坏了,则手机耐摔指数=7。
特别地,如果手机从第1层扔下去就坏了,则耐摔指数=0。
如果到了塔的最高层第n层扔没摔坏,则耐摔指数=n为了减少测试次数,从每个厂家抽样3部手机参加测试。某次测试的塔高为1000层,如果我们总是采用最佳策略,在最坏的运气下最多需要测试多少次才能确定手机的耐摔指数呢?请填写这个最多测试次数。注意:需要填写的是一个整数,不要填写任何多余内容。

此题 答案为19 通过关系式 (K^3+5K)/6>=1000 (下为详解)

解题思路:

先说说题意

一共 1000 层 某款手机的耐摔指数 为 1~1000的任何值(超出1000 也按1000算),每款手机只有三部一模一样的手机给我们测试用 也就是说 我们最多摔坏3次 而且 最后一次摔坏的层数就是该款手机的耐摔指数。你就需要制定一个最优的方案 适用与所有不同的手机测试并且测试次数要小于等于最坏情况下的次数。(最坏情况 就是 一个边界测试次数,无论手机的耐摔指数是多少,总能在这个边界测试次数前 找到该手机的耐摔指数)

此题 二分肯定莫法搞 只有 3部手机 ,如果 手机耐摔指数为10 你二分 先来500层 一扔 碎了 再来250层 又碎了 就剩一部手机了 咋办 你难道要扔 125 ,此时 你莫法 只有从老老实实从第一层 开始扔 才能扔到第10层测出结果,这样你就会扔 1+1+10 =12 次 ,需要测试12次 才能得到 该手机的耐摔指数,可是如果 该手机的耐摔指数为 249 哪 按照二分 就得 1+1+249=251次。所以必须另辟思路

如果 只有一部手机给你测试 哪只能 从第一层开始扔 最坏情况就是 从1扔到 1000层去,最坏情况就是1000次

如果 只有二部手机给你测试 ,这时候 就相当于多了一次机会 可以博上一博 减少点测试次数(准确的说是减少最坏情况下的测试次数),这个时候就需要假设一下了 ,最坏测试次数为 k 次 ,也就是说 无论你手机的耐摔指数为多少(1000内), 我都能通过k次测试 找到,那么想想

假设 第 1 次随便随便选一层扔 ,选 第 层 碎了,那么只好 从第1层 开始扔了

最坏就是 耐摔指数为 -1 要1+-1= 次测试 (同时保证 <=k) 若没碎就可以进行下一步

假设 第 2 次随便随便选一层扔 ,选第 层 碎了,那么只好 从第 +1层 开始扔了

最坏就是 耐摔指数为 -1 要1+1+( -1)- = -+1 次测试(同时保证 -+1 <=k)若没碎就可以进行下一步

假设 第 3次随便随便选一层扔 ,选第 层 碎了,那么只好 从第 +1层 开始扔了

最坏就是 耐摔指数为 -1 要1+1+(-1)- =- +2 次测试 (同时保证 - +2 <=k)若没碎就可以进行下一步

假设 第 k次随便随便选一层扔 ,选第 层 碎了,那么只好 从第+1层 开始扔了

最坏就是 耐摔指数为 -1 要1+1+1…1+(-1)-=-+(k-1) 次测试 (同时保证 -+(k-1) <=k, )

然后 我们把它们 给排一排 如下

<=k

-+1 <=k

- +2 <=k

……

-+(k-1) <=k

看到这样的 忍不住 就 想消消元 于是乎 如下

+ -+1+- +2…… -+(k-1)<=kk

消掉元之后: 1+2+3….+(k-1)+<=kk

前面常数求和公式 k(k-1)/2 +<=kk

再变一下 <=kk-k(k-1)/2 即得到 <=k(k+1)/2

再一想 是第k次 扔手机 所以 这是最后一次,要保证1~1000层所有情况都考虑即>=1000

要想测试次数k 最少 所以 当然取1000 于是乎 就得到

当给你两部手时 在最坏情况下最小测试次数满足 k(k+1)/2>=1000 那么k 就得出了

现在 给的是 三部 手机,则用同样的方法 设 最坏测试次数为 K 次 ,

假设 第 1 次随便随便选一层扔 ,选 第 层 碎了,碎了我也有2部手机不是,

那么 我此时想用两部手机测出 1~( -1)范围的耐摔指数就和上面情况一样的

最坏测试次数满足关系 k(k+1)/2>=-1= -1 (同时保证 k+1<=K,===>k<=K-1注 :这是大 K )

若没碎就可以进行下一步

假设 第 2 次随便随便选一层扔 ,选第 层 碎了,碎了我也有2部手机不是,

那么 我此时想用两部手机测出 ( +1)~( -1)范围的耐摔指数就和上面情况一样的

最坏测试次数满足关系 k(k+1)/2>=( ​​​​​​​-1)- =​​​​​​​- -1 (同时保证 k+1+1 <=K,===>k<=K-2注 :这是大 K)

若没碎就可以进行下一步

假设 第 3 次随便随便选一层扔 ,选第 层 碎了,碎了我也有2部手机不是,

那么 我此时想用两部手机测出( +1)~( -1)范围的耐摔指数就和上面情况一样的

最坏测试次数满足关系 k(k+1)/2>=( -1)-​​​​​​​ =​​​​​​​- ​​​​​​​-1 (同时保证 k+1+1+1 <=K,===>k<=K-3注 :这是大 K)

假设 第 k次随便随便选一层扔 ,选第 层 碎了,那么只好 碎了我也有2部手机不是,

那么 我此时想用两部手机测出(​​​​​​​+1)~( -1)范围的耐摔指数就和上面情况一样的

最坏测试次数满足关系 k(k+1)/2>=( -1)-( ​​​​​​​+1)=​​​​​​​- ​​​​​​​ -1(同时保证 k+1+1….+1 <=K,===>k<=K-K注 :这是大 K)

如法炮制 但是这里的小k 每行是不一样的所以要将他们 用大K 替换掉

k(k+1)/2>=-1= -1 k<=K-1

k(k+1)/2>=( ​​​​​​​-1)- =​​​​​​​- -1 k<=K-2

k(k+1)/2>=( -1)- ​​​​​​​ =​​​​​​​- ​​​​​​​-1 k<=K-3

……

k(k+1)/2>=( -1)- ​​​​​​​=​​​​​​​- ​​​​​​​ -1 k<=K-K

替换后:

(K-1)K/2>=-1= -1

(K-2)(K-1)/2>=( ​​​​​​​-1)- =​​​​​​​- -1

(K-3)(K-2)/2>=( -1)- ​​​​​​​=​​​​​​​- ​​​​​​​-1

……

(K-K)(K-(K-1))/2>=( -1)- ​​​​​​​=​​​​​​​- ​​​​​​​ -1

消消元: 1/2 [(K-1)K+ (K-2)(K-1)+(K-3)(K-2)……(K-K)(K-(K-1))]>=-K

配凑法: 1/2 [k^2+(K-1)^2+ (K-2)^2+(K-3)^2……(K-(k-1))^2]-[K+(K-1)+(K-2)+(k-3)……+(K-(K-1))]>=-K

(同时增加减少 [K+(K-1)+(K-2)……(K-(K-1))]- [K+(K-1)+(K-2)……(K-(K-1))+(K-K)] )

两边化简一下:1/2 [K^2+(K-1)^2+ (K-2)^2+(K-3)^2……1^2]-[K+(K-1)+(K-2)+(k-3)……+(K-(K-1))+(K-K)]>=-K

===>1/2 [K^2+(K-1)^2+ (K-2)^2+(K-3)^2……1^2]-[K(K+1)-1-2-3…..-K]>=-K

根据平方求和公式

所以 原式等于 1/2{ K(K+1)(2K+1)/6 -[K(K+1)-K(K+1)/2]>=-K

====>1/2{ K(K+1)(2K+1)/6 -[K(K+1)-K(K+1)/2]>=-K

====> (K^3+5K)/6 >= ==1000

====> K=19

于是就得到了 公式

如此类推 可以得到其4部手机 5部 手机等

代码 就随便写了


#include<stdio.h>
int main(){
    int i;
      for(i=0;i<100;i++)
       if((i*i*i+i*5)/6>=1000)break;
       printf("%d\n",i);
    return 0;
} 


  目录