有下面这道笔试题,麻烦抽时间实现一下测试用例设计和算法 题目:QQ号的价值,有一个简单的判断依据,就是号码越小价值越高。现在有个1000000(一百万)QQ号的数组,需要找出前100个价值最高的QQ号码(即最小的100个QQ号) 要求:完成测试用例设计,并用你擅长的语言实现一下解法(解题语言不限,代码可以截图或者拍照发过来)
时间: 2023-02-26 15:28:31 浏览: 58
好的,我来帮助您解决这道笔试题。
首先,关于测试用例设计,我们可以考虑以下几种情况:
1. 数组内有重复的QQ号码,确保算法能够正确处理重复的情况,最终前100个价值最高的QQ号码不应该有重复的。
2. 数组内有不合法的QQ号码(如负数,小于0或大于1000000的数字),确保算法能够正确处理不合法的情况,最终前100个价值最高的QQ号码都是合法的。
3. 数组内的QQ号码个数小于100个,确保算法能够正确处理这种情况,最终前100个价值最高的QQ号码应该是数组内所有的QQ号码。
对于算法实现,我选择 Python 语言来实现。代码如下:
```
def find_qq_numbers(numbers, n):
numbers = list(set(numbers)) # 去重
numbers = [number for number in numbers if 0 < number <= 1000000] # 筛选合法的QQ号码
numbers.sort() # 排序
return numbers[:min(n, len(numbers))] # 返回前n个价值最高的QQ号码
numbers = [100, 200, 300, 100, 200, 500, 500, 500, 200]
result = find_qq_numbers(numbers, 100)
print(result)
```
该算法先去重,再筛选出合法的QQ号码,然后对QQ号码进行排序,最后返回前n个价值最
相关问题
题目:QQ号的价值,有一个简单的判断依据,就是号码越小价值越高。现在有个1000000(一百万)QQ号的数组,需要找出前100个价值最高的QQ号码(即最小的100个QQ号) 要求:完成测试用例设计,并用python语言实现一下解法
### 回答1:
测试用例设计:
1. 输入一个空数组,期望返回一个空数组。
2. 输入一个长度为1的数组,期望返回该数组。
3. 输入一个长度大于100的数组,期望返回长度为100的数组,其中包含前100个最小的QQ号。
4. 输入一个长度为100的数组,期望返回该数组中前100个最小的QQ号。
5. 输入一个乱序的数组,期望返回该数组中前100个最小的QQ号。
6. 输入一个全部为重复数字的数组,期望返回该数组中前100个最小的QQ号。
7. 输入一个包含非数字的数组,期望抛出TypeError异常。
8. 输入一个包含负数的数组,期望抛出ValueError异常。
Python解法:
以下是一个使用堆(heap)的Python解法,堆是一种可以快速找到最小元素的数据结构,时间复杂度为O(nlogk),其中n为数组长度,k为需要找的元素个数(100)。
```python
import heapq
def find_top_qq(qq_list):
# 检查输入是否合法
for qq in qq_list:
if not isinstance(qq, int):
raise TypeError('所有输入必须为整数')
if qq < 0:
raise ValueError('所有输入必须为非负整数')
# 使用堆找到前100个最小的QQ号
return heapq.nsmallest(100, qq_list)
```
示例调用:
```python
# 空数组
assert find_top_qq([]) == []
# 长度为1的数组
assert find_top_qq([123456]) == [123456]
# 长度大于100的数组
assert find_top_qq(list(range(1, 100001))) == list(range(1, 101))
# 长度为100的数组
assert find_top_qq(list(range(1, 101))) == list(range(1, 101))
# 乱序数组
assert find_top_qq([5, 3, 4, 2, 1, 6, 8, 7, 9, 10, 12, 11, 14, 13, 15, 16, 18, 17, 19, 20] + list(range(21, 100001))) == list(range(1, 101))
# 全部为重复数字的数组
assert find_top_qq([1] * 1000000) == [1] * 100
# 包含非数字的数组
try:
find_top_qq([1, 2, 3, 'four', 5])
except TypeError:
pass
else:
raise AssertionError('没有抛出TypeError异常')
# 包含负数的数组
try:
find_top_qq([1, 2, 3, -4, 5])
except ValueError:
pass
else:
raise AssertionError('没有抛出ValueError异常')
```
注意:由于题目要求返回最小的100个QQ号,因此以上解法中使用了`heapq.nsmallest`函数,如果需要返回最大的100个QQ号,则可以使用`heapq.nlargest`函数。
### 回答2:
首先,我们可以将问题转化为对一个有1,000,000个整数的数组进行排序,然后选择前100个最小的整数。
在Python中,我们可以使用列表的sort()方法来进行排序。然而,由于数组中的QQ号码是整数,我们可以使用更高效的堆数据结构进行排序。
以下是解题的具体步骤:
1. 创建一个空的最小堆(min heap)和一个空的结果列表。
2. 遍历QQ号码数组,将每个QQ号码添加到最小堆中。
3. 当最小堆的大小超过100时,我们需要将堆顶元素(最小值)弹出。
4. 重复步骤2和3,直到遍历完所有的QQ号码。
5. 最终,堆中剩余的100个最小的QQ号码就是我们要找的结果。
6. 将这100个QQ号码从堆中弹出,并加入结果列表中。
7. 返回结果列表,即为前100个价值最高的QQ号码。
以下是Python代码实现:
```python
import heapq
def find_top_qq_numbers(qq_numbers):
heap = [] # 创建一个空的最小堆
result = [] # 创建一个空的结果列表
for qq in qq_numbers:
heapq.heappush(heap, qq) # 将QQ号码加入最小堆中
if len(heap) > 100:
heapq.heappop(heap) # 当堆的大小超过100时,弹出堆顶元素(最小值)
while len(heap) > 0:
result.append(heapq.heappop(heap)) # 从堆中弹出最小值,并加入结果列表中
return result
# 测试用例
qq_numbers = [1000000 - i for i in range(1000000)] # 将从1到1000000倒序排列,模拟1000000个QQ号码
top_qq_numbers = find_top_qq_numbers(qq_numbers)
print(top_qq_numbers) # 输出前100个最小的QQ号码
```
这样,我们利用最小堆的特性,能够在O(nlogk)的时间复杂度内找出前100个最小的QQ号码,其中n为QQ号码数组的大小,k为要求的最小值的个数。
### 回答3:
测试用例设计:
1. 输入的QQ号码数组为空的情况(数组长度为0)
2. 输入的QQ号码数组长度小于100的情况
3. 输入的QQ号码数组长度大于等于100的情况
4. 输入的QQ号码数组中存在相同的号码的情况
5. 输入的QQ号码数组中存在非法的号码的情况(非数字字符,长度不为6的字符)
Python语言实现:
```python
def find_top_100_qq(qq_numbers):
# 排除非法号码
qq_numbers = [qq for qq in qq_numbers if qq.isdigit() and len(qq) == 6]
# 对号码数组进行排序,选取前100个最小的号码
top_100_qq = sorted(qq_numbers)[:100]
return top_100_qq
# 测试用例
test_cases = [
# 测试用例1:输入的QQ号码数组为空的情况
{
'input': [],
'output': []
},
# 测试用例2:输入的QQ号码数组长度小于100的情况
{
'input': ['123456', '654321', '987654'],
'output': ['123456', '654321', '987654']
},
# 测试用例3:输入的QQ号码数组长度大于等于100的情况
{
'input': ['456789', '111111', '222222', '888888'],
'output': ['111111', '222222', '456789', '888888']
},
# 测试用例4:输入的QQ号码数组中存在相同的号码的情况
{
'input': ['111111', '111111', '222222', '333333'],
'output': ['111111', '222222', '333333']
},
# 测试用例5:输入的QQ号码数组中存在非法的号码的情况
{
'input': ['123456', 'abcdef', '654321', '123', '987654'],
'output': ['123456', '654321', '987654']
}
]
for test_case in test_cases:
assert find_top_100_qq(test_case['input']) == test_case['output']
```
说明:
- 在实现时,首先排除了非法的QQ号码,即非数字字符和长度不为6的号码。
- 然后使用sorted函数对号码数组进行排序,并选取前100个最小的号码作为结果。
软件质量保证与测试题软件测试基础软件测试策略黑盒测试以及测试用例设计练习题题目数量多一点
好的,我可以为你提供更多的练习题,希望能够帮助你更好地理解软件测试相关的知识。
1. 请简述一下白盒测试的概念和特点。
2. 请简述一下灰盒测试的概念和特点。
3. 请简述一下功能测试和性能测试的区别。
4. 请简述一下测试计划的内容和目的。
5. 请简述一下测试执行的流程和要求。
6. 请简述一下测试报告的内容和要求。
7. 请简述一下软件缺陷的分类和处理流程。
8. 请简述一下软件测试的常用工具和技术。
9. 请列举一些测试用例设计的方法。
10. 请简述一下测试用例的设计原则和要求。
希望这些题目能够对你有所帮助。如果你还有其他问题,欢迎随时提出。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)