【问题标题】:Finding max element which is to the right of column 'k'查找列“k”右侧的最大元素
【发布时间】:2019-10-23 16:11:40
【问题描述】:

我有一个任务要求我找到位于“k”列右侧的最大元素(据我所知,我需要在 k+1 列中找到最大值)。我显然做错了,因为当我运行代码时,最大值等于 0。一定是我遗漏了一个错误,因此我们将不胜感激。 这是我的代码:

#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;

int main() {
 int n,m,k;
 int max=-1000001;
 int  a[10][10];
 cin>>n>>k;
 m=n;
  for (int i=0;i<n;i++) {
   for (int j=0;j<m;j++) {
     cin>>a[i][j];
   }
 }
 for(int i=0;i<n;i++)
{
       for (int j=0;j<m+1;j++)
       {
        if(a[i][j]>max && a[i][j]!=max && j==k+1)
        max=a[i][j];
       } 
}
  if (k>=m)
     cout<<"No";
  else
     cout<<max;    
}

这是输入:

3 2
1 2 3
5 5 2
6 3 4

这是我应该得到的输出:

4

【问题讨论】:

  • 当您使用调试器运行此程序时,它的行为与您预期不同的第一个点是什么?

标签: c++ arrays algorithm for-loop max


【解决方案1】:

要获得您想要的预期输出,编写就足够了

int max = a[0][k+1];

for ( int i = 1; i < n; i++ )
{
    if ( max < a[i][k+1] ) max = a[i][k+1];
}

我假设k + 1 小于m。就是这张支票

如果 (k>=m) cout

应在循环之前完成。例如

int max;

if ( k + 1 < m )
{
    max = a[0][k+1];

    for ( int i = 1; i < n; i++ )
    {
        if ( max < a[i][k+1] ) max = a[i][k+1];
    }
}

if ( not ( k + 1 < m ) )
    cout<<"No";
else
    cout<<max;    

对于这个输入

3 2

程序将发出“否”,因为当 k 等于 2 时 k + 1 产生 3 并且 3 不是有效索引。此输入的有效索引范围是[0, 2]

您可以使用我对此输入的回答中提供的代码获得预期结果

3 1

【讨论】:

  • 是的,它与所有其他输入完美配合,但我还需要这个程序来处理“3 2”输入。有什么办法吗?
  • @xdarkestshadow 我是否已经在回答中写过有效的索引范围是 [0, 2]。因此使用索引 2 + 1 ( == k + 1) 是无效的,并导致未定义的行为。你需要未定义的行为吗?:)
猜你喜欢
  • 2021-08-29
  • 2021-11-07
  • 1970-01-01
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
  • 2014-07-21
  • 2014-06-02
相关资源
最近更新 更多