python解决逻辑判断题:
【问题描述】:
四个同学小明、小红、小刚、小强分别说:
小明说:我第1,小红第4,小刚第3
小红说:我第1,小明第4,小刚第2,小强第3
小刚说:小红第4,小明第3
小强说:小刚第1,我第4,小红第2,小明第3
对于四个人的成绩,每个人说的都只有一个是正确的,输出四个人的成绩排名。
【代码解决】:
注:解法相当憨批,暴力求解,for if 大法,但思路还是比较好理解的
【思路分析】:
将所有的排序方式列出,选取满足条件的一组,排序结果为:第一个人说的成绩‘a’正确,第二个人说的成绩‘b’正确……
最终确定成绩排序
【作者想说的话】:
君莫笑,莫喷……解法确实憨憨了,和以前的警察抓小偷不是一种题型,所以临时这样想的……
def grade_is():
# a是小明、b是小红、c是小刚、d是小强
xm={'a':1 , 'b':4 , 'c':3 , 'd':2}
xh={'a':4 , 'b':1 , 'c':2 , 'd':3}
xg1={'a':3 , 'b':4 , 'c':1 , 'd':2}
xg2={'a':3 , 'b':4 , 'c':2 , 'd':1}
xq={'a':3 , 'b':2 , 'c':1 , 'd':4}
name_list = [[xm,xh,xg1,xq],[xm,xh,xg2,xq]]
for name in name_list:
for i in range(4):
for j in range(4):
if name[i] == name[j] or name[i].get('a')==name[j].get('b'):
continue
for k in range(4):
if name[i] == name[k] or name[i].get('a')==name[k].get('c') \
or name[j] == name[k] or name[j].get('b')==name[k].get('c'):
continue
for l in range(4):
if name[i] == name[l] or name[i].get('a')==name[l].get('d') \
or name[j] == name[l] or name[j].get('b')==name[l].get('d')\
or name[k] == name[l] or name[k].get('c')==name[l].get('d'):
continue
if name[i].get('a') + name[j].get('b') + name[k].get('c') + name[l].get('d') == 10 \
and name[j].get('a')!=name[i].get('a') and name[k].get('a')!=name[i].get('a') and name[l].get('a')!=name[i].get('a') \
and name[i].get('b')!=name[j].get('b') and name[k].get('b')!=name[j].get('b') and name[l].get('b')!=name[j].get('b') \
and name[i].get('c')!=name[k].get('c') and name[j].get('c')!=name[k].get('c') and name[l].get('c')!=name[k].get('c') \
and name[i].get('d')!=name[l].get('d') and name[j].get('d')!=name[l].get('d') and name[k].get('d')!=name[l].get('d'):
print('小明的排名是{}\n小红的排名是{}\n小刚的排名是{}\n小强的排名是{}\n'.format(name[i].get('a'),name[j].get('b'),name[k].get('c'),name[l].get('d')))
grade_is()