以a、b、c对应x、y、z为例,求满足a!=x,c!=x,z的对应组合
代码如下:
for i in range(ord('x'),ord('z') + 1):
for j in range(ord('x'),ord('z') + 1):
if i != j:
for k in range(ord('x'),ord('z') + 1):
if (i != k) and (j != k):
if (i != ord('x')) and (k != ord('x')) and (k != ord('z')):
print 'order is a -- %s\t b -- %s\tc--%s' % (chr(i),chr(j),chr(k))
求满足限制条件下的解一般是使用遍历。
具体解决思路是:
为a b c与x y z找中间值,如“i j k”,使它们满足
1 x y z与i j k有一定的对应关系,比如这里是xyz与ijk 有隐式的一一对应,这个对应关系没有写出,但是写程序的时候默认i对应的就是x、j对应的就是y
2 i j k经过一定条件的映射,得到a b c,即
f(i) = a,
f(j) = b,
f(k)= c
然后f^(-1)(a) = i…
有时候会出现映射两次,即h(f(i)) = a或者说f(i)=h(a)
但总的来说思路是一样的—为某两组值找对应关系,就是找到两边某个值存在的对应关系
比如这里,中间值, i j k∈{ord(x),ord(y),ord(z)}
所以总的来说,对照着这段思路,这个问题的解决就是
a b c隐式对应这i j k,i j k取ord(x),ord(y),ord(z)的值满足条件,
从而a b c–>i j k—>x y z。
PS:
对限制条件的处理有两种;
一是在循环头上进行限制,y’ =f(x’)
二是在循环结果上进行筛选,y’ = (y)’