以以下格式添加2D阵列的元素的算法
algorithm to add elements of a 2D array in the following format?
假设任意数组X[N][3]是(如果N=3):
18 7 6
23 10 27
20 9 14
我需要添加这样的元素:
18+7+6=31, 18+23+10+27=78, 18+23+20+9+14=84
那么我需要找到最大值。在上面的情况下是84。我应该如何处理这个问题?一个适合C++的伪代码会很有帮助。
更新:对于那些认为我没有尝试过这个问题的人,我想说,我昨天花了整个时间来想出解决方案,我很沮丧,在这里寻求帮助。我想出了以下代码,但那是错误的:
for(int k=0; k<N; k++){
for(int i=0;i<N;i++){
if(i<N-1-k){
t=t+X[i][0];
}
else{
for(int j=0;j<3;j++){
t=t+X[i][j];
if(answer<t){
answer=t;
}
}
}
}
t=0;
}
cout<<answer;
由于您需要下面的伪代码,c#代码片段将对您有所帮助。我不知道你是不是在要求一个优化的算法。或者不是,但下面的代码正在计算所有可能的值(我的意思是,这不是最佳解决方案)
int[,] m = new int[3, 3] { { 18, 7, 6 }, { 23, 10, 27}, { 20, 9, 14 } };
int max = Int32.MinValue;
for (int i = 0; i < N; ++i)
{
int firstColl = 0;
for (int j = 0; j < i+1; ++j)
{
firstColl += m[j, 0];
}
int value = firstColl + m[i, 1] + m[i, 2];
if (max < value)
max = value;
}
您可以将std::accumulate
用于此目的:
int array[][3] = { {18, 7, 6}, {23, 10, 27}, {20, 9, 14} };
auto partial_sum = 0;
auto result = std::accumulate(std::cbegin(array), std::cend(array), std::numeric_limits<int>::min(),
[&partial_sum](int result, auto const& subarray) {
auto new_result = partial_sum
+ std::accumulate(std::cbegin(subarray), std::cend(subarray), 0);
partial_sum += *std::cbegin(subarray);
return std::max(new_result, result);
});
std::cout << result << 'n';
Coliru上的现场演示。
请注意,我使用了C++14特性:有一个通用lambda来避免指定子数组容器类型的麻烦(这样,无论使用哪个容器,代码都能工作)。
使用非成员begin和end的兴趣是将我们自己从所选的容器中抽象出来。
一个更简单的基于循环的版本:
#define N 3
int array[N][3] = { {18, 7, 6}, {23, 10, 27}, {20, 9, 14} };
int partial_sum = 0;
int result = std::numeric_limits<int>::min();
for (int i = 0; i < N; ++i) {
int row_sum = 0;
for (int j = 0; j < 3; ++j) {
row_sum += array[i][j];
}
result = std::max(row_sum + partial_sum, result);
partial_sum += array[i][0];
}
int add = 0;
int sum = 0;
int max = 0;
for(int i = 0; i<n;i++){
add+=arr[i][0];
sum = add;
for(int j=1;j<n;j++){
sum+=arr[i][j];
}
if(max<sum){
max = sum;
}
}
cout<<max;
相关文章:
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 求最大元素位置的分治算法
- 为什么这个选择排序算法仍然切换一个元素,当它已经是其他元素中最小的元素时?
- C++线性搜索算法,确定数组中元素的数量
- 打印所有儿童树元素的最佳算法?
- 使用 Rcpp 加速替换迭代算法中的列表和向量元素是否合法?
- 如何使用cpp编写选择排序算法以降序对元素列表进行排序?
- 找到对称矩阵的最大元素的最有效算法是什么
- 使用简单的暴力算法找到数组中最大的4个元素
- C++ 查找算法:如何找到元素的最后一次出现?
- 对数组进行排序的算法,先是第一个元素,然后是前 2 个元素,然后是前 3 个元素,依此类推
- 如何在不使用标准算法的情况下在排序向量中添加 c 元素?
- C++ std::向量插入两个元素替代算法失败
- 编写递归算法以从链表中删除元素.编写递归算法以将元素添加到链表中
- 使用算法中的插入函数将元素插入空容器中,未给出预期的结果
- 算法在容器中查找具有给定值的元素之一的成员
- 并行算法将向量的元素分配到另一个元素的元素
- 我如何在C 中制作算法,以在不重复的情况下查找集合的变化(即n元素,选择k)
- 删除元素的算法
- 在两个列表中匹配元素算法