需要在忽略对角线的情况下找到 4x2 数组的最小值
Need to find the minimum value of a 4x2 array while ignoring the diagonal
我需要找到不在主对角线上的数组中的最低值,我已经编写了一些代码,但它似乎只选择第二个或最后一个值(取决于哪个是最低值).
这是我的代码:
#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];
不好因为
- 当
i = 0, j = 0
时读取未初始化的arr[0][1]
。
- 它无条件地将
arr[0][1]
写入Min
,即使当前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];
}
你的 Min=arr[0][1]
行在两个循环内,这意味着每次当你试图比较 Min 和当前元素 arr[i][j]
时,你只是丢弃了存储在 [=13] 中的任何最小值=] 并将其替换为 arr[0][1]
.
因此您编写的代码 returns 最后一个数字或 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
}
}
我需要找到不在主对角线上的数组中的最低值,我已经编写了一些代码,但它似乎只选择第二个或最后一个值(取决于哪个是最低值).
这是我的代码:
#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];
不好因为
- 当
i = 0, j = 0
时读取未初始化的arr[0][1]
。 - 它无条件地将
arr[0][1]
写入Min
,即使当前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];
}
你的 Min=arr[0][1]
行在两个循环内,这意味着每次当你试图比较 Min 和当前元素 arr[i][j]
时,你只是丢弃了存储在 [=13] 中的任何最小值=] 并将其替换为 arr[0][1]
.
因此您编写的代码 returns 最后一个数字或 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
}
}