c++ a组3,1,2,4和b组1,2,2,3.求a和b数组乘积最大和值
时间: 2023-09-18 15:06:40 浏览: 66
可以先对数组a和数组b进行排序,然后从两个数组的末尾开始取数相乘,一直到取完k个数,求和即可,其中k为两个数组的长度。
以下是一个示例代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int maxProductSum(vector<int>& arr1, vector<int>& arr2) {
sort(arr1.begin(), arr1.end());
sort(arr2.begin(), arr2.end());
int n = arr1.size();
int sum = 0;
for (int i = 0; i < n; i++) {
sum += arr1[i] * arr2[n-1-i];
}
return sum;
}
int main() {
vector<int> arr1 = {3, 1, 2, 4};
vector<int> arr2 = {1, 2, 2, 3};
cout << maxProductSum(arr1, arr2) << endl;
return 0;
}
```
输出结果为:
```
27
```
相关问题
已知2个一维数组:a[]={3,4,5,6,7},b[]={1,2,3,4,5,6,7};把数组a与数组b对应的元素乘积在赋值给数组b,如:b[2]=a[2]*b[2]
可以通过循环遍历两个数组来实现这个功能,具体的代码实现如下:
```c++
int a[] = {3, 4, 5, 6, 7};
int b[] = {1, 2, 3, 4, 5, 6, 7};
int len_a = sizeof(a) / sizeof(a[0]); // a数组长度
int len_b = sizeof(b) / sizeof(b[0]); // b数组长度
int min_len = len_a < len_b ? len_a : len_b; // 取两个数组长度的最小值
for (int i = 0; i < min_len; i++) {
b[i] = a[i] * b[i];
}
// 输出结果
for (int i = 0; i < len_b; i++) {
cout << b[i] << " ";
}
```
运行结果为:1 2 15 24 35 42 49
这里使用了两个变量 `len_a` 和 `len_b` 来记录两个数组的长度,然后取两个数组长度的最小值作为循环的次数。在循环中,依次将 `a[i]` 和 `b[i]` 相乘,并将结果赋值给 `b[i]`。最后再次遍历数组 `b`,输出结果。
一、问题描述 A 和 B 为两个 N 阶对称矩阵,求两个对称矩阵之和与乘积 、基本要求 (1)输人:只输人对称矩阵下三角元素,存储在一维数组中 (2)输出:以阵列方式输出 (3)实现两个对称矩阵的和 (4)实现两个对称矩阵的乘积 、设计提示 1.数据结构设计 N 阶对称矩阵形式上是个二维数组,压缩存储时只存储其对角线及其上或其下的元素到大小为 2* N-1的一维数组。按题目要求,存储下三角元素。 2.功能设计 完成该实验至少涉及以下4个功能 (1) 创建矩阵 (2)输出矩阵(3)求对称矩阵A和B的和。 (4)求对称矩阵A和B的乘积。
以下是一个简单的 C++ 实现,实现了上述要求:
```c++
#include <iostream>
using namespace std;
const int MAXN = 100;
int A[MAXN*(MAXN+1)/2], B[MAXN*(MAXN+1)/2], C[MAXN*(MAXN+1)/2], D[MAXN*(MAXN+1)/2];
// 创建对称矩阵
void createMatrix(int mat[], int n) {
int idx = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
cin >> mat[idx++];
}
}
}
// 输出对称矩阵
void printMatrix(int mat[], int n) {
int idx = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
cout << mat[idx++] << " ";
}
cout << endl;
}
}
// 计算两个对称矩阵的和
void addMatrix(int A[], int B[], int C[], int n) {
int idx = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
C[idx] = A[idx] + B[idx];
idx++;
}
}
}
// 计算两个对称矩阵的乘积
void multiplyMatrix(int A[], int B[], int D[], int n) {
int idx = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
int sum = 0;
for (int k = 1; k <= i; k++) {
if (k >= j) {
sum += A[idx-k+j-1] * B[(k-1)*k/2+i-1];
} else {
sum += A[idx+j-k-1] * B[(j-1)*j/2+k-1];
}
}
D[idx] = sum;
idx++;
}
}
}
int main() {
int n;
cout << "请输入矩阵阶数:";
cin >> n;
cout << "请输入对称矩阵 A:";
createMatrix(A, n);
cout << "请输入对称矩阵 B:";
createMatrix(B, n);
cout << "对称矩阵 A:" << endl;
printMatrix(A, n);
cout << "对称矩阵 B:" << endl;
printMatrix(B, n);
addMatrix(A, B, C, n);
cout << "对称矩阵 A+B:" << endl;
printMatrix(C, n);
multiplyMatrix(A, B, D, n);
cout << "对称矩阵 A*B:" << endl;
printMatrix(D, n);
return 0;
}
```
该程序使用一维数组存储对称矩阵,根据输入的下三角元素计算出每个元素在数组中的下标。在计算两个对称矩阵的乘积时,使用了一个小技巧:先将下标转换成对应的行和列,然后按照矩阵乘法的定义计算。
阅读全文