第一题:九个元素中,要符合七星不靠,就得随机删除两个元素
举例:[ 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) 回帖