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;
}
相关推荐
weixin_460443562 小时前
2026年新修订《网络安全法》实施:Java私有化考试系统如何做好SBOM、漏洞治理与安全升级?
java·开发语言·在线考试系统·企业培训考试系统·宏远培训考试系统·国企培训考试系统·国产化培训系统
Cc.Y5 小时前
Java零基础入门:可变字符串与包装类:StringBuilder、StringBuffer 与 通讯录管理系统实战
java·开发语言·python
启观川5 小时前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·笔记·python·算法
码爸5 小时前
排序算法介绍
python·算法·排序算法
sm_926787055 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
阿森_dev5 小时前
2027 届毕设选题怎么选:30 个 Java 方向选题的实现难度排序
java·开发语言·spring boot·毕业设计·课程设计
by209995 小时前
C++ 多态:同一个基类接口,调用不同的函数
开发语言·c++·经验分享·多态
笔墨登场说说6 小时前
flink bin/start-cluster.sh 帮我做成开机启动
开发语言·python
Sarvartha6 小时前
Lambda 表达式和函数式接口
java·开发语言
小白学大数据6 小时前
拼多多反爬对抗实战:Scrapy 中间件化采集架构解析
开发语言·scrapy·中间件·架构