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;
}
相关推荐
??tobenewyorker4 分钟前
力扣打卡第二十一天 中后遍历+中前遍历 构造二叉树
数据结构·c++·算法·leetcode
贾全25 分钟前
第十章:HIL-SERL 真实机器人训练实战
人工智能·深度学习·算法·机器学习·机器人
rzl0231 分钟前
java web5(黑马)
java·开发语言·前端
GIS小天40 分钟前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年7月4日第128弹
人工智能·算法·机器学习·彩票
jingling55543 分钟前
面试版-前端开发核心知识
开发语言·前端·javascript·vue.js·面试·前端框架
oioihoii1 小时前
C++11 forward_list 从基础到精通:原理、实践与性能优化
c++·性能优化·list
满分观察网友z1 小时前
开发者的“右”眼:一个树问题如何拯救我的UI设计(199. 二叉树的右视图)
算法
m0_687399841 小时前
写一个Ununtu C++ 程序,调用ffmpeg API, 来判断一个数字电影的视频文件mxf 是不是Jpeg2000?
开发语言·c++·ffmpeg
爱上语文1 小时前
Redis基础(5):Redis的Java客户端
java·开发语言·数据库·redis·后端
A~taoker1 小时前
taoker的项目维护(ng服务器)
java·开发语言