L1-7 矩阵列平移

题目

给定一个 n×n 的整数矩阵。对任一给定的正整数 k<n,我们将矩阵的偶数列的元素整体向下依次平移 1、......、k、1、......、k、...... 个位置,平移空出的位置用整数 x 补。你需要计算出结果矩阵的每一行元素的和。

输入格式:

输入第一行给出 3 个正整数:n(<100)、k(<n)、x(<100),分别如题面所述。

接下来 n 行,每行给出 n 个不超过 100 的正整数,为矩阵元素的值。数字间以空格分隔。

输出格式:

在一行中输出平移后第 1 到 n 行元素的和。数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

7 2 99

11 87 23 67 20 75 89

37 94 27 91 63 50 11

44 38 50 26 40 26 24

73 85 63 28 62 18 68

15 83 27 97 88 25 43

23 78 98 20 30 81 99

77 36 48 59 25 34 22
输出样例:

440 399 369 421 302 386 428

样例解读

需要平移的是第 2、4、6 列。给定 k=2,应该将这三列顺次整体向下平移 1、2、1 位(如果有更多列,就应该按照 1、2、1、2 ...... 这个规律顺次向下平移),顶端的空位用 99 来填充。平移后的矩阵变成:

11 99 23 99 20 99 89

37 87 27 99 63 75 11

44 94 50 67 40 50 24

73 38 63 91 62 26 68

15 85 27 26 88 18 43

23 83 98 28 30 25 99

77 78 48 97 25 81 22

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int main()
{
    // 读取矩阵大小 n、平移步长 k 和填充元素 num
    int n, k, num;
    cin >> n >> k >> num;

    // 用于记录当前偶数列的平移步数,初始为 1
    int p = 1;

    // 定义两个 n+1 行 n+1 列的二维数组
    // s 数组用于存储原始矩阵元素
    // s_aim 数组用于存储平移后的矩阵元素
    int s[n + 1][n + 1];
    int s_aim[n + 1][n + 1];

    // 读取矩阵元素并初始化 s_aim 数组
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> s[i][j];
            s_aim[i][j] = s[i][j];
        }
    }

    // 遍历矩阵的每一列
    for (int i = 1; i <= n; i++) {
        // 如果平移步长为 0,无需平移,跳出循环
        if (k == 0) break;

        // 如果是偶数列,进行平移操作
        if (i % 2 == 0) {
            // 将当前偶数列元素向下平移 p 个位置
            for (int j = n; j >= 1; j--) {
                s_aim[j][i] = s[j - p][i];
            }

            // 用 num 填充平移后空出的位置
            for (int j = 1; j <= p; j++) {
                s_aim[j][i] = num;
            }

            // 更新平移步数 p,按 1 到 k 循环
            p = (p % k) + 1;
        }
    }

    // 计算并输出平移后矩阵每行元素的和
    for (int i = 1; i <= n; i++) {
        int sum = 0;
        for (int j = 1; j <= n; j++) {
            sum += s_aim[i][j];
        }
        cout << sum;
        // 每行和之间用空格分隔,但最后一行末尾无空格
        if (i != n) cout << " ";
    }

    return 0;
}
相关推荐
董董灿是个攻城狮3 小时前
AI视觉连载8:传统 CV 之边缘检测
算法
blasit10 小时前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
AI软著研究员10 小时前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish10 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱11 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者1 天前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮1 天前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者1 天前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考1 天前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx1 天前
CART决策树基本原理
算法·机器学习