Z字形考场编排算法

在大型考试中学生的座号一般按6*5 Z字形编排。如下图:

1       12      13      24      25
2       11      14      23      26
3       10      15      22      27
4       9       16      21      28
5       8       17      20      29
6       7       18      19      30

使用程序如何实现呢?

看似毫无头绪,怎么办呢?先看看这样的排列如何实现

1       7       13      19      25
2       8       14      20      26
3       9       15      21      27
4       10      16      22      28
5       11      17      23      29
6       12      18      24      30

这个很简单,i为行,j为列,数据为 座号=i+j*6+1 (i,j从0起始)

对比两个排列发现1、3、5列一样,只是2、4列不一样,那么我们可以根据奇数列和欧数列分别进行计算

奇数列不变,座号=i+j*6+1 (i,j从0起始)

偶数列其值随着行数增加而减小,座号=m=(j+1)*6-i-1

实现代码如下:

for i in range(6):
    for j in range(5):
        if j%2==0:
            m=j*6+i
        else:
            m=j*6-i+5
        print(m+1,end="\t")
    print("")

这里把奇数列和偶数列分别做了处理,那么能不能把两个公式变成一个呢?

m=j*6+((-1)**(j%2))*i+5*(j%2)      这样就可以用一个公式计算了。

代码如下:

for i in range(6):
    for j in range(5):
        m=j*6+(-1**j)*i+5*(j%2)
        print(m+1,end="\t")
    print("")

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值