逻辑思维题一:条件组合覆盖

2023-12-28 13:18

本文主要是介绍逻辑思维题一:条件组合覆盖,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们知道软件测试对测试人员的逻辑思维要求比较高,而且笔试时经常会出一些逻辑思维方面的问题,今天我们来看一个问题。

题目是这样的:八瓶酒一瓶有毒,用人测试。每次测试结果8小时后才会得出,而你只有8个小时的时间。问最少需要____人测试?

遇到这样的问题我们应该怎么处理呢?看题目感觉比较抽象,我们可以对此进行转化为条件组合覆盖测试方法。 首先可以对八瓶酒进行编号:a,b,c,d,e,f,g,h; 有毒的酒可以当成一个bug;

测试结果8小时后才会得出,而你只有8个小时的时间。对于这个条件我们应该转换一下思路:一个人其实可以同时喝多瓶酒,所以可以将每个人喝的酒看成一个集合;需要多少人,可以看成最少测试几个集合的组合可以完全覆盖a~h。

我们再想一下,这个题目已经告诉我们了,有一个bug,所以我们可以只要覆盖a~g,7个字母。

所以这个题目可以转化为:最少设计多少集合组合测试能够完全覆盖a~h 8个字母,我们可以假设集合顺序从a到h,最少集合为n个。

所以组合条件可以是:集合1,集合2,集合3....,集合n;集合1+集合2,集合2+集合3,集合3+集合n....,集合n+1;集合1+集合2+集合3,....

最终演变为n+n+n+1=n(n-1)+1,如果要覆盖完全a~g 7个字母,必须是n(n-1)+1>=7,计算得到最小正整数n=3。这个也是此题目的答案,最少需要3个人测试。每个人喝3瓶酒,有好多组合,但集合必须满足集合组合之间有相同的酒,以下给出一个组合:


分析:如果3人都出现中毒,则a酒有毒;如果3人都没中毒,则h酒有毒
          如果第一人中毒,则d酒有毒 如果第二人中毒, f酒有毒;如果第三人中毒,则g酒有毒
    如果第一,二人中毒,第三人没中毒,则b酒有毒;如果第一,三人中毒,第二人没中毒,则c酒有毒 如果第二,三人有问题,第一人没问题,则e酒 有毒。

总结:遇到这种问题,直接通过公式n(n-1)+1>=酒数量-1计算出n的最小正整数,就是需要的最少人数。每个集合的数量=酒数量-1-n, 而且遇到类似问题,可以通过这种条件组合思路去解决问题。

如果此题目换一个问法:八瓶酒,大量检测表明,有可能有一瓶酒有问题,为了检测是否有一瓶酒有毒,用人测试。每次测试结果8小时后才会得出,而你只有8个小时的时间。问最少需要____人测试?

这篇关于逻辑思维题一:条件组合覆盖的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/546072

相关文章

hdu4869(逆元+求组合数)

//输入n,m,n表示翻牌的次数,m表示牌的数目,求经过n次操作后共有几种状态#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#includ

最大流=最小割=最小点权覆盖集=sum-最大点权独立集

二分图最小点覆盖和最大独立集都可以转化为最大匹配求解。 在这个基础上,把每个点赋予一个非负的权值,这两个问题就转化为:二分图最小点权覆盖和二分图最大点权独立集。   二分图最小点权覆盖     从x或者y集合中选取一些点,使这些点覆盖所有的边,并且选出来的点的权值尽可能小。 建模:     原二分图中的边(u,v)替换为容量为INF的有向边(u,v),设立源点s和汇点t

POJ3041 最小顶点覆盖

N*N的矩阵,有些格子有物体,每次消除一行或一列,最少要几次消灭完。 行i - >列j 连边,表示(i,j)处有物体,即 边表示 物体。 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;impo

封装MySQL操作时Where条件语句的组织

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。 条件语句大致分为以下几种: 1、单一条件,比如:where id = 1; 2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60; 3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND sco

Go组合

摘要 golang并非完全面向对象的程序语言,为了实现面向对象的继承这一神奇的功能,golang允许struct间使用匿名引入的方式实现对象属性方法的组合 组合使用注意项 使用匿名引入的方式来组合其他struct 默认优先调用外层方法 可以指定匿名struct以调用内层方法 代码 package mainimport ("fmt")type People struct{}type Pe

使用条件变量实现线程同步:C++实战指南

使用条件变量实现线程同步:C++实战指南 在多线程编程中,线程同步是确保程序正确性和稳定性的关键。条件变量(condition variable)是一种强大的同步原语,用于在线程之间进行协调,避免数据竞争和死锁。本文将详细介绍如何在C++中使用条件变量实现线程同步,并提供完整的代码示例和详细的解释。 什么是条件变量? 条件变量是一种同步机制,允许线程在某个条件满足之前进入等待状态,并在条件满

一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)

1.没有分段的情况 原函数为一元二次凹函数(开口向下),如下: 因为要使得其存在正解,必须满足,那么。 上述函数的最优结果为:,。 对应的mathematica代码如下: Clear["Global`*"]f0[x_, a_, b_, c_, d_] := (a*x - b)*(d - c*x);(*(b c+a d)/(2 a c)*)Maximize[{f0[x, a, b,

组合c(m,n)的计算方法

问题:求解组合数C(n,m),即从n个相同物品中取出m个的方案数,由于结果可能非常大,对结果模10007即可。       共四种方案。ps:注意使用限制。 方案1: 暴力求解,C(n,m)=n*(n-1)*...*(n-m+1)/m!,n<=15 ; int Combination(int n, int m) { const int M = 10007; int

代码随想录训练营day37|52. 携带研究材料,518.零钱兑换II,377. 组合总和 Ⅳ,70. 爬楼梯

52. 携带研究材料 这是一个完全背包问题,就是每个物品可以无限放。 在一维滚动数组的时候规定了遍历顺序是要从后往前的,就是因为不能多次放物体。 所以这里能多次放物体只需要把遍历顺序改改就好了 # include<iostream># include<vector>using namespace std;int main(){int n,m;cin>>n>>m;std::vector<i

INDEX+SMALL+IF+ROW函数组合使用解…

很多人在Excel中用函数公式做查询的时候,都必然会遇到的一个大问题,那就是一对多的查找/查询公式应该怎么写?大多数人都是从VLOOKUP、INDEX+MATCH中入门的,纵然你把全部的多条件查找方法都学会了而且运用娴熟,如VLOOKUP和&、SUMPRODUCT、LOOKUP(1,0/....,但仍然只能对这种一对多的查询望洋兴叹。   这里讲的INDEX+SMALL+IF+ROW的函数组合,