帮我用三种c++方法写以下代码,编写一个函数,计算二维整型数组中各列之和。主函数中进行输入、输出。要求使 用动态内存分配实现。 输入样例: 3 3 1 2 3 4 5 6 7 8 9 输出样例: 12 15 18
时间: 2023-09-16 15:06:03 浏览: 60
### 回答1:
方法一:使用指针
```c++
#include <iostream>
using namespace std;
void columnSum(int* arr[], int rows, int cols) {
for (int j = 0; j < cols; j++) {
int sum = 0;
for (int i = 0; i < rows; i++) {
sum += *(arr[i] + j);
}
cout << sum << " ";
}
}
int main() {
int rows, cols;
cin >> rows >> cols;
int** arr = new int* [rows];
for (int i = 0; i < rows; i++) {
arr[i] = new int[cols];
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cin >> arr[i][j];
}
}
columnSum(arr, rows, cols);
for (int i = 0; i < rows; i++) {
delete[] arr[i];
}
delete[] arr;
return 0;
}
```
方法二:使用数组名作为参数
```c++
#include <iostream>
using namespace std;
void columnSum(int arr[][3], int rows, int cols) {
for (int j = 0; j < cols; j++) {
int sum = 0;
for (int i = 0; i < rows; i++) {
sum += arr[i][j];
}
cout << sum << " ";
}
}
int main() {
int rows, cols;
cin >> rows >> cols;
int** arr = new int* [rows];
for (int i = 0; i < rows; i++) {
arr[i] = new int[cols];
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cin >> arr[i][j];
}
}
columnSum(arr, rows, cols);
for (int i = 0; i < rows; i++) {
delete[] arr[i];
}
delete[] arr;
return 0;
}
```
方法三:使用模板函数
```c++
#include <iostream>
using namespace std;
template <size_t rows, size_t cols>
void columnSum(int (&arr)[rows][cols]) {
for (int j = 0; j < cols; j++) {
int sum = 0;
for (int i = 0; i < rows; i++) {
sum += arr[i][j];
}
cout << sum << " ";
}
}
int main() {
int rows, cols;
cin >> rows >> cols;
int** arr = new int* [rows];
for (int i = 0; i < rows; i++) {
arr[i] = new int[cols];
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cin >> arr[i][j];
}
}
columnSum<3, 3>(arr);
for (int i = 0; i < rows; i++) {
delete[] arr[i];
}
delete[] arr;
return 0;
}
```
### 回答2:
#include <iostream>
using namespace std;
void getColumnSum(int** arr, int rows, int cols) {
int* sum = new int[cols]; // 用于存储每列的和
for (int i = 0; i < cols; i++) {
sum[i] = 0; // 初始化每列的和为0
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
sum[j] += arr[i][j]; // 累加每列的值
}
}
for (int i = 0; i < cols; i++) {
cout << sum[i] << " "; // 输出每列的和
}
cout << endl;
delete[] sum; // 释放内存
}
int main() {
int rows, cols;
cin >> rows >> cols;
// 动态分配二维数组
int** arr = new int*[rows];
for (int i = 0; i < rows; i++) {
arr[i] = new int[cols];
}
// 输入数组元素
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cin >> arr[i][j];
}
}
getColumnSum(arr, rows, cols);
// 释放内存
for (int i = 0; i < rows; i++) {
delete[] arr[i];
}
delete[] arr;
return 0;
}
### 回答3:
以下是使用三种C++方法编写计算二维整型数组各列之和的代码:
方法一:使用传统的数组方法
#include <iostream>
using namespace std;
void columnSum(int** arr, int rows, int cols) {
for (int j = 0; j < cols; j++) {
int sum = 0;
for (int i = 0; i < rows; i++) {
sum += arr[i][j];
}
cout << sum << " ";
}
}
int main() {
int rows, cols;
cin >> rows >> cols;
int** arr = new int*[rows];
for (int i = 0; i < rows; i++) {
arr[i] = new int[cols];
for (int j = 0; j < cols; j++) {
cin >> arr[i][j];
}
}
columnSum(arr, rows, cols);
// 释放内存
for (int i = 0; i < rows; i++) {
delete[] arr[i];
}
delete[] arr;
return 0;
}
方法二:使用一维数组作为二维数组的扁平表示
#include <iostream>
using namespace std;
void columnSum(int* arr, int rows, int cols) {
for (int j = 0; j < cols; j++) {
int sum = 0;
for (int i = 0; i < rows; i++) {
sum += arr[i * cols + j];
}
cout << sum << " ";
}
}
int main() {
int rows, cols;
cin >> rows >> cols;
int size = rows * cols;
int* arr = new int[size];
for (int i = 0; i < size; i++) {
cin >> arr[i];
}
columnSum(arr, rows, cols);
delete[] arr;
return 0;
}
方法三:使用vector作为二维数组
#include <iostream>
#include <vector>
using namespace std;
void columnSum(vector<vector<int>>& arr) {
int rows = arr.size();
int cols = arr[0].size();
for (int j = 0; j < cols; j++) {
int sum = 0;
for (int i = 0; i < rows; i++) {
sum += arr[i][j];
}
cout << sum << " ";
}
}
int main() {
int rows, cols;
cin >> rows >> cols;
vector<vector<int>> arr(rows, vector<int>(cols));
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cin >> arr[i][j];
}
}
columnSum(arr);
return 0;
}