2041:【例5.9】新矩阵

题目网址:信息学奥赛一本通(C++版)在线评测系统

题目介绍:

2041:【例5.9】新矩阵


时间限制: 1000 ms         内存限制: 65536 KB
提交数:68922    通过数: 33334

【题目描述】

已知一个n×n(2≤n≤20)�×�(2≤�≤20)的矩阵(方阵),把矩阵二条对角线上的元素值加上1010,然后输出这个新矩阵。

【输入】

第一行为n�;

下面为一个n×n�×�,矩阵中各正整数小于100100。

【输出】

输出新的矩阵。共n�行,每行n�数,各数之间用一个空格隔开。

【输入样例】

5
13 66 53 89 55
11 72 61 62 46
90 10 38 10 55
95 20 43 27 19
60 12 66 16 96

【输出样例】

23 66 53 89 65 
11 82 61 72 46 
90 10 48 10 55 
95 30 43 37 19 
70 12 66 16 106

样例代码:

#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a[n][n];
    for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>a[i][j];
    for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(i==j || i+j == n-1) a[i][j]+=10;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
return 0;
}

#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a[n][n];
    for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>a[i][j];
    for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(i==j || i+j == n-1) a[i][j]+=10;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
return 0;
}

在C++中,对矩阵中的每个元素应用 `floor` 函数可以通过自定义矩阵类或使用现有的库(如Eigen、Armadillo等)来实现。如果选择手动实现一个简单的矩阵类,并对其中的每个元素进行操作,则可以按照以下方式设计: ### 自定义矩阵类并实现 floor 操作 首先定义一个基础的矩阵类 `Matrix`,并在其中实现 `floor` 方法,该方法会对矩阵中的每一个元素执行向下取整操作。 ```cpp #include <vector> #include <cmath> #include <iostream> class Matrix { public: int row, column; std::vector<std::vector<double>> data; Matrix(int r, int c) : row(r), column(c), data(r, std::vector<double>(c)) {} // 设置数据 void set(int i, int j, double value) { if (i >= 0 && i < row && j >= 0 && j < column) data[i][j] = value; } // 获取数据 double get(int i, int j) const { if (i >= 0 && i < row && j >= 0 && j < column) return data[i][j]; return 0.0; // 默认返回值 } // 对矩阵中的每个元素应用 floor 函数 Matrix floor() const { Matrix result(row, column); for (int i = 0; i < row; ++i) for (int j = 0; j < column; ++j) result.data[i][j] = std::floor(data[i][j]); // 使用 C++ 标准库中的 floor 函数 [^3] return result; } // 打印矩阵 void print() const { for (int i = 0; i < row; ++i) { for (int j = 0; j < column; ++j) std::cout << data[i][j] << " "; std::cout << std::endl; } } }; // 测试代码 int main() { Matrix mat(2, 3); mat.set(0, 0, -1.1); mat.set(0, 1, 2.1); mat.set(0, 2, 3.0); mat.set(1, 0, 4.9); mat.set(1, 1, -5.9); mat.set(1, 2, 6.0); std::cout << "Original Matrix:" << std::endl; mat.print(); Matrix flooredMat = mat.floor(); std::cout << "\nFloored Matrix:" << std::endl; flooredMat.print(); return 0; } ``` ### 使用第三方库(以 Eigen 为) 如果项目允许使用第三方库,可以考虑使用 **Eigen** 这样的高性能线性代数库,它提供了对矩阵运算的高度抽象支持。 #### 示:使用 Eigen 实现对矩阵中每个元素应用 `floor` ```cpp #include <Eigen/Dense> #include <cmath> #include <iostream> int main() { // 定义一个 2x3 的矩阵 Eigen::MatrixXd mat(2, 3); mat << -1.1, 2.1, 3.0, 4.9, -5.9, 6.0; std::cout << "Original Matrix:\n" << mat << "\n\n"; // 对矩阵中的每个元素应用 floor Eigen::MatrixXd flooredMat = mat.unaryExpr([](double x) { return std::floor(x); }); // 使用 unaryExpr 对每个元素进行操作 [^3] std::cout << "Floored Matrix:\n" << flooredMat << std::endl; return 0; } ``` 上述两种方法均能实现对矩阵中每个元素应用 `floor` 函数的功能,具体选择取决于是否允许引入外部依赖以及项目的复杂度需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值