【问题标题】:Need to find the minimum value of a 4x2 array while ignoring the diagonal需要在忽略对角线的情况下找到 4x2 数组的最小值
【发布时间】:2021-08-09 14:17:51
【问题描述】:

我需要找到不在主对角线中的数组中的最小值,我已经编写了一些代码,但它似乎只选择了第二个或最后一个值(取决于哪个是最低的)。

这是我的代码:

#include<iostream>
using namespace std;
int main()
{
    int arr[4][2];
    int Min,i,j;
    cout<<"Type 8 numbers";
    for (i=0;i<4;i++)
    {
        for (j=0;j<2;j++)
        {
            cin>>arr[i][j];
            Min=arr[0][1];
            if(i!=j and Min > arr[i][j])
            {
                Min=arr[i][j];
            }
        }
    }
    cout<<"The values of the array are: \n";
    for (i=0;i<4;i++)
    {
        cout<<"\n";
        for (j=0;j<2;j++)
        {
            cout<<arr[i][j]<<"\t";
        }
    }
    cout<<"The lowest value is: "<<Min;
}

如果我输入 1-8,则返回值为 2,如果我输入 8-1,则返回值为 1,在这两种情况下,代码都按我的预期工作,但如果我输入类似 8,6 的内容, 4,1,2,3,4,5,最小值返回为 5,我对编码非常陌生,希望能提供帮助。

【问题讨论】:

  • Min=arr[0][1]; 应该只执行一次...
  • 四乘二数组没有“主对角线”,因此不太清楚您要完成什么。

标签: c++ arrays minimum


【解决方案1】:

线

Min=arr[0][1];

不好是因为

  • i = 0, j = 0时读取为未初始化的arr[0][1]
  • 它无条件地将arr[0][1] 写入Min,即使当前Min 小于此值。

而不是这个:

Min=arr[0][1];
if(i!=j and Min > arr[i][j])
{
    Min=arr[i][j];
}

这将起作用,例如:

if(i!=j and ((i==0 and j==1) or Min > arr[i][j]))
{
    Min=arr[i][j];
}

【讨论】:

    【解决方案2】:

    您的 Min=arr[0][1] 行在两个循环内,这意味着每次当您尝试比较 Min 和当前元素 arr[i][j] 时,您只需丢弃存储在 Min 中的任何最小值并用 @987654324 替换它@。

    因此,您编写的代码返回最后一个数字或arr[0][1],以较小者为准。

    您应该只在循环开始之前初始化这个Min 一次。即

    Min = arr[0][1]
    for(i = 0; i < 4;i++)
    {
        for(j = 0; j < 2; j++)
        {
         // Compare Min and arr[i][j] and reassign the smaller one to Min if i != j
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-11-13
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 2013-12-04
      相关资源
      最近更新 更多