題目:兩個桌球隊進行比賽,各出三人。甲隊為1, 2, 3三人,乙隊為4, 5, 6
三人。已抽籤決定比賽名單。有人向隊員打聽比賽的名單。
1說他不和4比,3說他不和4, 6比,請程式設計序找出三隊賽手的名單。
思路:類似於分支限界的剪枝法,窮舉回溯
a,b,c代表甲隊的1,2,3
d,e,f代表最後符合篩選條件的,分別對應於1,2,3的對手
a=1
b=2c=3
d=4e=5
f=6for i in range(1,4):
for j in range(4,7):
if (i == 1 and j == 4):
continue
if ((i == 3 and j == 4) or (i == 3 and j == 6)):
continue
for k in range(4,7):
if(k==j):
continue
if(i==1):
d=je=k
f=15-j-k
if (i == 2):
e = j
f = k
d = 15 - j - k
if (i == 3):
f = j
d = k
e = 15 - j - k
if(not(a==1 and d==4) and (c==3 and d==4) and (c==3 and f==6)):
d=je=k
f=15-j-k
break
print('%d的對手為:%d'%(a,d))
print('%d的對手為:%d'%(b,e))
print('%d的對手為:%d'%(c,f))
#執行結果
# 1的對手為:6
# 2的對手為:4
# 3的對手為:5
法二
a,b,c代表甲隊的1,2,3
d,e,f代表最後符合篩選條件的,分別對應於1,2,3的對手
思路:隨機變換d,e,f對應的4,5,6的對應關係
直到出現符合跳出迴圈條件的結果出現
a=1
b=2c=3
d=4e=5
f=6i=0
while((a==1 and d==4) or (c==3 and f==4) or (c==3 and f==6)):
# while (not ((a==1 and d==6) and (b==2 and e==4) and (c==3 and f==5))):
i=i+1
#if這幾個交換位置怎樣換都可以,但必須保證三種交換可能都必須出現一次
#即例如:第乙個是d和e交換,第二個是e和f交換,第三個必須是d和f交換
#想降低時間複雜度可以考慮交換順序與賦予初值之間的配合
if(i%2):
temp=f
f=ee=temp
if(i%3):
temp = d
d = f
f = temp
else:
temp = d
d = e
e = temp
print('%d的對手為:%d'%(a,d))
print('%d的對手為:%d'%(b,e))
print('%d的對手為:%d'%(c,f))
#執行結果
# 1的對手為:6
# 2的對手為:4
# 3的對手為:5
方法粗糙,但易於理解,有誤望指正 Python之列表 元組小練
修改列表,列表屬於可變物件,值是可以改變的,字串屬於不可變物件,不能修改其中的值 list1 0 98 print list1 str1 ahdh str1 0 q print str1 list3 2 0 33 如果需要修改子列表中的值,多用一次下標 print list3 列表中的切片 prin...
Python之檔案讀寫小練
file1 open c test note1.txt 注意可能有轉義符的情況 file1 open c test note1.txt 可以多加乙個 讓特殊含義不生效 file1 open c test note1.txt 可以用 替換成 效果是一樣的 file1 open r c test not...
Python之字串小練
字串 a 3 數字 b 1234 字串可以用單引號表示 c 1 字串也可以用雙引號表示 引導既可以用單引號也可以用雙引號,但是要前後一致 print 列印括號內的內容到控制台 print it s ok.當句子中有單引號時,可以用雙引號,避免語法錯誤 print he said are you ok...