循环日程表

用分治的思想实现:
data=[]
def copy(data,n,x1,y1,x2,y2):
for i in range(n):
for j in range(n):
data[x2+i][y2+j]=data[x1+i][y1+j]
def creat_table(data,n,i,j):
if(n==2):
data[i][j]=i+1
data[i][j+1]=i+2
data[i+1][j]=i+2
data[i+1][j+1]=i+1
else:
m=int(n/2)
creat_table(data,m,i,j)
creat_table(data,m,i+m,j)
copy(data,m,i,j,i+m,j+m)
copy(data,m,i+m,j,i,j+m)
def main():
data=[]
n=int(input("输入:"))
#print("初始化数组")
for i in range(n):
d=[]
for j in range(n):
d.append(0)
data.append(d)
creat_table(data,n,0,0)
print("最终日程表")
for i in range(n):
for j in range(n):
print(data[i][j],end=' ')
print()
if __name__ == '__main__':
main()
输入8生成的表格结果是:

输入16生成的表格结果是:

生成的日程表表格data[n][m]表示的意思是ID为n的选手在第m天与ID为data[n][m比赛

浙公网安备 33010602011771号