CCF CSP 2014-12-1 门禁系统、 2014-12-2 Z字形扫描(Python实现)

第一题 2014-12-1 门禁系统

试题编号:201412-1
试题名称:门禁系统
时间限制:1.0s
内存限制:256.0MB
问题描述: 问题描述   涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。每位读者有一个编号,每条记录用读者的编号来表示。给出读者的来访记录,请问每一条记录中的读者是第几次出现。 输入格式   输入的第一行包含一个整数n,表示涛涛的记录条数。
  第二行包含n个整数,依次表示涛涛的记录中每位读者的编号。 输出格式   输出一行,包含n个整数,由空格分隔,依次表示每条记录中的读者编号是第几次出现。 样例输入 5
1 2 1 1 3 样例输出 1 1 2 3 1 评测用例规模与约定   1≤n≤1,000,读者的编号为不超过n的正整数。

解题思路

将输入的数放置到数组中,然后利用双重循环得到每个数是第几次出现,记录并输出即为最后结果。
代码如下:

# 201412-1 门禁系统
n = int(input())
arr = []
res = []
list = input().split()
for i in range(n):
    arr.append(int(list[i]))
    res.append(i)
for i in range(n):
    cou = 0
    for j in range(n):
        if arr[i] == arr[j]:
            cou += 1
            res[j] = cou
            continue
print(" ".join(str(i) for i in res))

第二题 2014-12-2 Z字形扫描

试题编号:201412-2
试题名称:Z字形扫描
时间限制:2.0s
内存限制:256.0MB
问题描述:

问题描述 

        在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个n×n的矩阵,Z字形扫描的过程如下图所示:

《CCF CSP 2014-12-1 门禁系统、 2014-12-2 Z字形扫描(Python实现)》

对于下面的4×4的矩阵,
  1 5 3 9
  3 7 5 6
  9 4 6 4
  7 3 1 3
对其进行Z字形扫描后得到长度为16的序列:
  1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3
  请实现一个Z字形扫描的程序,给定一个n×n的矩阵,输出对这个矩阵进行Z字形扫描的结果。

输入格式
输入的第一行包含一个整数n,表示矩阵的大小。
  输入的第二行到第n+1行每行包含n个正整数,由空格分隔,表示给定的矩阵。   

输出格式      输出一行,包含n×n个整数,由空格分隔,表示输入的矩阵经过Z字形扫描后的结果。    样例输入 4
1 5 3 9
3 7 5 6
9 4 6 4
7 3 1 3 样例输出
1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3
评测用例规模与约定
1≤n≤500,矩阵元素为不超过1000的正整数。

解题思路后面更新:

以下是代码(100):可能写的有些繁琐,但是暂时没有更好的思路,大佬有的话可以提示一下。

# 201412-2 Z字形扫描
n = int(input())
arr = []
res = []
for i in range(n):
    arr.append(list(map(int, input().split())))
leng = 2 * n -1
for k in range(leng):   # 第一个值
    if k == 0:
        res.append(arr[k][k])
        continue
    elif k == leng - 1:  # 最后一个值
        res.append(arr[n-1][n-1])
        continue
    if k % 2 == 0:      # 为偶数行时
        if k < n:        # 偶数行且为左三角区域
            l = k
            m = 0
            while(l >= 0):
                res.append(arr[l][m])
                l -= 1
                m += 1
        else:            # 偶数行右三角区域
            l = n - 1
            x = k - n + 1
            while(x < n):
                res.append(arr[l][x])
                l -= 1
                x += 1
    else:
        if k < n:         # 奇数行且为左三角区域
            l = k
            m = 0
            while(l >= 0):
                res.append(arr[m][l])
                l -= 1
                m += 1
        else:              # 奇数行右三角区域
            l = n - 1
            x = k - n + 1
            while(x < n ):
                res.append(arr[x][l])
                l -= 1
                x += 1
print(" ".join(str(i) for i in res))

以上。

    原文作者:Z字形编排问题
    原文地址: https://blog.csdn.net/weixin_43159628/article/details/83538683
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞