csdn:编程挑战001

-- peter喜欢玩数字游戏,但数独这样的游戏对他来说太简单了,于是他准备玩一个难的游戏。

-- 游戏规则是在一个N*N的表格里填数,规则:对于每个输入的N,从左上角开始,总是以对角线为起点,先横着填,再竖着填。

-- 这里给了一些样例,请在样例中找到规律并把这个N*N的表格打印出来吧。 

-- 输入描述: 多组测试数据(数据量在100组以内)。

-- 每组测试数据只有一行为一个整数N(1<=N<=30),表示表格的大小。 

-- 输出描述: 对于每组输入数据,输出N行,为填完的表格(N行,每行N个整数,每个数字之间用空格隔开。 

--[[

local function ctfx (num)

  if not tonumber(num) then error ("invalid number") end

  local st = {}

  local step = 1

  local coun = 1

  local tmp  = 0

  local k    = 0

  

  for i=1,num do

    st[i] = {}

  end

  

  local bk = {}

  for i=num,1,-1 do

    bk[num-i+1] = 2*i-1

  end

  

  for i=1,num do

    coun = coun + 1

    tmp = coun

    k = i

    for j=1, bk[i] do -- j:只记录个数。

      if j <= (num-i+1) then

        if num ~= i then

          st[i][k] = step; step = step + 1;k = k + 1

        else

          st[num][num] = step

        end  

      else       

          st[tmp][i] = step

          step = step + 1

          tmp = tmp + 1

      end  

    end

  end  

  return st

end


local n = 5

local jsp = ctfx(n)


-- print

for i=1,n do

for j=1,n do

--  print (jsp[i][j])

  io.write(string.format("%-2d ", jsp[i][j]))

end

  io.write(string.format("\n-------------\n"))

end

]]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值