第一题:九个元素中,要符合七星不靠,就得随机删除两个元素
举例:[ 1T 4T 7T;2B 5B 8B;3W 6W 9W ]
情况1、从上面的序列中随机删除两个元素,假如删除两个T结尾的元素,那么以W和B结尾的元素个数肯定都是3个,以T结尾的元素个数只有1个,也就是B和W出现的次数都是3次,T出现的次数只有1次,同理删两个B或两个W结尾的也一样
情况2、从上面的序列中随机删除两个元素,假如这两个元素的结尾不一样,例如一个W和一个B,那么删除之后以T结尾的元素个数肯定有3个,以W和B结尾的元素个数都是2个,也就是T的出现频率是3次,W和B的出现频率是2次,同理删除任意两个结尾不一样的元素也都是符合上面的情况
总结:如果给定的测试数据里面,存在三个不同的字母T、B、W,并且他们的出现次数按从小到大排序是【1 3 3】(情况1)或者【2 2 3】(情况2)那么该测试数据就能满足七星不靠,输出YES,否则输出NO
n = 4
# 字母列表
alpha = ['T','B','W']
# 测试数据
D = [['1T','4T','7T','2B','5B','8B','9W'],
['1T','2T','3T','4T','5T','6T','7T'],
['1B','2W','3T','4B','5W','6T','8W'],
['2B','8B','5B','2B','6T','7W','4W']]
for i in range(n):
alp = {} # 字典,用于统计字母以及每个字母的出现次数
temp = D[i]
for item in temp:
nu,al = item # 将‘XY'分解成’X'和‘Y’
# 统计字母以及每个字母的出现次数
if al not in alp:
alp[al]=1
else:
alp[al]=alp[al]+1
temp = list(alp.items()) # 将字典转换成元祖列表
temp.sort(key=lambda x:(x[1],[0])) # 按照每个字母出现的次数进行排序
ans = [item[1] for item in temp] # 提取出现的频率
if ans == [1,3,3] or ans == [2,2,3]:
print('YES')
else:
print('NO') n = 3 num = [[1,0,0], [0,10,10], [0,10,10]] while num: # 找最大值所在的行的下标 row = -1 for i in range(len(num)): temp = num[i] ind = temp.index(max(temp)) row = max(row,ind) # 转置列表 tnum = [[item[j] for item in num] for j in range(len(num))] # 找最大值所在的列的下标 col = -1 for i in range(len(tnum)): temp = tnum[i] ind = temp.index(max(temp)) col = max(col,ind) temp = [] # 删除行 num.remove(num[row]) # 删除列 for item in num: del item[col] temp.append(item) # 十字划之后的新的矩阵 num = temp # 打印输出结果 print(row+1,col+1)
全部评论
(0) 回帖