PAT 1097 矩阵行平移 (20 分)

PAT 1097 矩阵行平移 (20 分)

看原题请点我

个人感觉题目描述的不太清楚,这里的意思是,奇数行向右平移,每次平移1,2,3 … k, 1, 2, 3, … ,k。并不是1, k, 1, k。而且示例给的实在太狡猾了。容易被误导(别问我是怎么知道容易被误导的)

题目本身不难,可以采用数学的方式直接计算,也可以采取笨方法再重新开一个数组进行模拟。

C++代码:

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n, k, x;
    cin >> n >> k >> x;
    vector<vector<int>> a(n,vector<int>(n));
    for (int i = 0; i < n; i++){
        for (int j = 0; j < n; j++){
            cin >> a[i][j];
        }
    }
    vector<vector<int>> b(n,vector<int>(n));
    int now = 1;
    for (int i = 0; i < n; i++){
        if (i % 2 == 0) {
            for (int j = 0; j < now; j++){
                b[i][j] = x;
            }
            for (int j = now; j < n; j++){
                b[i][j] = a[i][j - now];
            }
            now++;
            if (now == k + 1){
                now = 1;
            }
        } else {
            for (int j = 0; j < n; j++){
                b[i][j] = a[i][j];
            }
        }
    }
    for (int i = 0; i < n; i++){
        int sum = 0;
        for (int j = 0; j < n; j++){
            sum += b[j][i];
        }
        if (i == 0){
            cout << sum;
        }else {
            cout << " " << sum;
        }
    }
    cout << endl;
    return 0;
}
  • 喜欢的话可以点个赞哦
### PAT 1003 编程题解法 PAT乙级1003是一道经典的编程题目,主要考察考生对于数组操作的理解以及逻辑思维能力。以下是针对该问题的一种高效解决方案。 #### 题目概述 本题要求实现一个程序来处理一组输入数据,并按照特定规则输出结果。具体来说,给定一系列整数,需要对其进某种变换并返回最终的结果[^3]。 #### 实现方法 为了更好地解决这个问题,可以采用C语言作为开发工具。下面展示了一种简单易懂的方法: ```c #include <stdio.h> int main() { int n, k; scanf("%d%d", &n, &k); // 输入数组长度和移动次数 int array[n]; for(int i=0;i<n;i++) { scanf("%d",&array[i]); // 初始化数组 } // 创建临时存储空间用于保存右移后的数值 int temp[k]; // 将最后K个元素复制到temp中 for(int j=n-k;j<n;j++) { temp[j-(n-k)] = array[j]; } // 移动剩余部至右侧位置 for(int m=k;m<n;m++) { array[m]=array[m-k]; } // 把之前暂存的数据放回原数组开头处 for(int p=0;p<k;p++) { array[p]=temp[p]; } // 输出调整后的新序列 for(int q=0;q<n-1;q++) printf("%d ",array[q]); printf("%d\n",array[n-1]); return 0; } ``` 上述代码片段展示了如何利用简单的数组操作完成所需功能。它首先定义了一个大小为`n`的整型数组用来接收原始数据;接着通过两次循环别实现了子数组提取与整体平移的过程;最后再把先前保留下来的末端若干项重新安置到起始端口上从而达成目标效果。 #### 性能考量 此算法的时间复杂度接近O(n),其中n代表列表中的项目总数。由于只需要遍历整个集合一次即可获得期望成果,在实际应用当中表现良好。 #### 注意事项 当面对边界情况比如全零矩阵或者负数情形时,务必仔细验证每一步骤是否都能正常运作。此外还应注意防止越界访问等问题发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值