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;
}
相关推荐
阿珊和她的猫26 分钟前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript
PAK向日葵2 小时前
【算法导论】PDD 0817笔试题题解
算法·面试
fouryears_234173 小时前
Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
开发语言·flutter·客户端·dart
我好喜欢你~3 小时前
C#---StopWatch类
开发语言·c#
lifallen5 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研5 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
地平线开发者5 小时前
ReID/OSNet 算法模型量化转换实践
算法·自动驾驶
快乐的划水a5 小时前
组合模式及优化
c++·设计模式·组合模式
地平线开发者5 小时前
开发者说|EmbodiedGen:为具身智能打造可交互3D世界生成引擎
算法·自动驾驶
cui__OaO6 小时前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习