
怎么用python解决啊?
————————————————————————————————————(分割线)
好了,参照了高手的做法后我也算是写出这道改编题了,代码放在下面,其实思路并不会很难,就是暴力枚举,只是这种获取所有排列组合的函数写法我是真没想到可以这样写,也算是有所收获。最后,我觉得这道题改编地不好,因为这样并没有唯一解,会输出满足条件的多个答案。
# 获取答案的所有排列组合
def get_all_str(str, num):
if(num == 1):
for x in str:
yield x
else:
for x in str:
for y in get_all_str(str, num-1):
yield x+y
strKey=['A','B','C','D']
answer_list = []
for x in get_all_str(strKey,10):
answer_list.append(':'+x) # 获得所有答案组合,从1开始计数
# 进行运算
x=int(input())
y=int(input())
z=int(input())
for a in answer_list:
if(a[2] == 'A' and a[5] == 'C') or (a[2] == 'B' and a[5] == 'D') or \
(a[2] == 'C' and a[5] == 'A') or (a[2] == 'D' and a[5] == 'B'):
if(a[4] =='A' and a[1]==a[5] and a[x]!=a[y] and a[x]!=a[z] and a[z]!=a[y]) or \
(a[4] =='B' and a[1]!=a[5] and a[x]==a[y] and a[x]!=a[z] and a[z]!=a[y]) or \
(a[4] =='C' and a[1]!=a[5] and a[x]!=a[y] and a[x]==a[z] and a[z]!=a[y]) or \
(a[4] =='D' and a[1]!=a[5] and a[x]!=a[y] and a[x]!=a[z] and a[z]==a[y]):
if(a[5] =='A' and a[5]==a[8]) or \
(a[5] =='B' and a[5]==a[4]) or \
(a[5] =='C' and a[5]==a[9]) or \
(a[5] =='D' and a[5]==a[7]):
if(a[6] == 'A' and a[2]==a[4]==a[8]) or \
(a[6] == 'B' and a[1]==a[6]==a[8]) or \
(a[6] == 'C' and a[3]==a[10]==a[8]) or \
(a[6] == 'D' and a[5]==a[9]==a[8]):
if(a[8]=='A' and abs(strKey.index(a[7])-strKey.index(a[1]))!=1) or \
(a[8]=='B' and abs(strKey.index(a[5])-strKey.index(a[1]))!=1) or \
(a[8]=='C' and abs(strKey.index(a[2])-strKey.index(a[1]))!=1) or \
(a[8]=='D' and abs(strKey.index(a[10])-strKey.index(a[1]))!=1):
if(a[9]=='A' and (a[1]==a[6]) != (a[6]==a[5])) or \
(a[9]=='B' and (a[1]==a[6]) != (a[10]==a[5])) or \
(a[9]=='A' and (a[1]==a[6]) != (a[2]==a[5])) or \
(a[9]=='A' and (a[1]==a[6]) != (a[9]==a[5])):
num = []
for i in strKey:
num.append(a.count(i))
if(a[7] == 'A' and strKey[num.index(min(num))]=='C') or \
(a[7] == 'B' and strKey[num.index(min(num))]=='B') or \
(a[7] == 'C' and strKey[num.index(min(num))]=='A') or \
(a[7] == 'D' and strKey[num.index(min(num))]=='D'):
if(a[10] == 'A' and (max(num)-min(num))==3) or \
(a[10] == 'B' and (max(num)-min(num))==2) or \
(a[10] == 'C' and (max(num)-min(num))==4) or \
(a[10] == 'D' and (max(num)-min(num))==1):
print(a[1:])
这就是按题目所给的例子输出的答案,有多个(包含了所给的示例答案)