#1:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
def getthreenum(num):
for i in range(num):
for j in range(num):
for k in range(num):
for l in range(num):
set1 = {i,j,k}
set2 = {i,j,l}
set3 = {j, k, l}
set4 = {i, k, l}
if i not in set3 and j not in set4 and k not in set2 and l not in set1:
print(i,j,k,l)
#调用方法:getthreenum(6)
#2、如何去除里面重复的元素?
def listremoverepeat(a):
d = {}
i1 = 0
for i in a:
d[i] = i1
i1 = i1 + 1
print(d)
l = d.keys()
l2 = []
for i in l:
l2.append(i)
print(l2)
调用方法:
a = ['192.168.245.2', '192.168.245.20', '192.168.245.2', '192.168.245.20', '192. 168.245.20', '192.168.245.1',
'192.168.245.1']
listremoverepeat(a)
# 3、明明的随机数
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1
到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,
#不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做
#调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)
def 明明的随机数(num1, num2):
list = []
for i in range(num1, num2):
rand = random.randint(num1, num2)
list.append(rand)
list.sort() #排序
print(set(list)) #使用集合去重
#调用方法:
明明的随机数(1, 1000)
# 4、去重找数
1、有四个数字:1,2,3,4,能组成多少个互不相同且无重复数字的三位数?一共有多少个数字?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。
def 去重找数(list):
src = []
dst = []
列表排列组合(list, src, dst)
print('总数:',len(dst))
调用方法
去重找数([1, 2, 3, 4, 5])
#7、位次排序
1、在一次数学竞赛中,A、B、C、D、E五名同学分别获得了前五名(假设无并列名次)。
小敏问他们分别是第几名,A、B、C、D、E这五位同学每人只说对一半。他们的回答如下:
#A:第二名是D,第三名是B
B:第二名是C,第四名是E
C:第一名是E,第五名是A
D:第三名是C,第四名是A
E:第二名是B,第五名是D
请问正确的答案是:
def getrightanswer():
l1 = ['D2', 'B3']
l2 = ['C2', 'E4']
l3 = ['E1', 'A5']
l4 = ['C3', 'A4']
l5 = ['B2', 'D5']
l = [l1, l2, l3, l4, l5]
#从l1-l5中每个取一个数,如D2 C2 E1 C3 B2,对取到的数进行判断,如果字母和数字其中一个出现重复,则抛弃,直到最后没有出现重复的为止即答案
rets = []
for i1 in l1:
for i2 in l2:
for i3 in l3:
for i4 in l4:
for i5 in l5:
ret = [i1, i2, i3, i4, i5]
rets.append(ret)
print('所有组合:',len(rets), rets)
#得到32=2**5种组合,接下来需要对每种组合做判断
for i in rets:
str = ' '.join(i)
same = False
for j in i:
if str.count(j[0]) == 1 and str.count(j[1]) == 1:
same = False
else:
same = True
break
if same == False:
print("结果:",str)
#调用方法
getrightanswer()
#8、谁说谎
2、甲、乙、丙、丁四人中有一人做了好事不留姓名。请大家编写程序,根据以下线索找出做好事的人。
#甲:不是我
乙:是丙
#丙:是丁
#丁:丙说的不对
其中三人说的是真话,一人说的是假话。
#请问谁说的是假话:丙
def guessISwho():
l1 = ['甲0']
l2 = ['丙1']
l3 = ['丁1']
l4 = ['丁0']
l = [l1, l2, l3, l4]
#先把0的部分使用其他替代,从而取消字符串里的数字,留下了备选答案
for i in l:
if i[0][1] == '0':
str1 = '甲乙丙丁'
i[0] = str1.replace(i[0][0], '')
else:
i[0] = i[0].replace(i[0][1], '')
print(i)
#四个人有三个说的是真话,一个说假话,说明有三个交集是一样的,没有出现交集的那个就是假话
#因此,做好事的人是丙,说假话的也是丙:
str1 = "".join(l1)
r1 = set(str1)
str1 = "".join(l2)
r2 = set(str1)
str1 = "".join(l3)
r3 = set(str1)
str1 = "".join(l4)
r4 = set(str1)
rr = [r1, r2, r3, r4]
#四种情况取出三个的组合有以下四种情况,情况过去简单不做遍历,或是使用下面方法找出组合方式
r = [1, 2, 3, 4]
ret = []
for i in r:
for j in r:
for k in r:
if i != j and j != k and i != k:
sortl = [i, j, k]
sortl.sort()
ret.append(sortl)
#print(ret)
#去重处理
for i in ret:
if ret.count(i) > 1:
temp = i
for j in range(ret.count(i)):
ret.remove(i)
ret.append(temp)
print(ret)
i1 = 0
s0 = set()
for i in ret:
j1 = 0
for j in i:
if j1 == 0:
s0 ^= rr[0]
if j1 > 0:
s0 &= rr[j - 1]
j1 += 1
i1 +=1
if len(s0) > 0:
print('结果是:', s0)
#调用方法
guessISwho()
#9、移动列表
3、[‘taobao’,‘jingdong’,‘alibaba’,‘baidu’,‘taobao’]对元素去重复
def movelist(list):
s = set(list)
l = []
for i in s:
l.append(i)
print(l)
return l
#调用方法
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print("移动数列")
print(l)
l = movelist(l)