#c #arrays #minimum
Вопрос:
Мне нужно найти наименьшее значение в массиве, который не находится в главной диагонали, я написал некоторый код, но, похоже, он выбирает только второе или последнее значение (в зависимости от того, какое из них самое низкое).
вот мой код:
#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, я очень новичок в кодировании и был бы признателен за любую помощь.
Комментарии:
1.
Min=arr[0][1];
это следует сделать только один раз…2. Массив размером четыре на два не имеет «главной диагонали», поэтому не очень понятно, чего вы пытаетесь достичь.
Ответ №1:
Линия
Min=arr[0][1];
это плохо, потому что
- Он читается неинициализированным
arr[0][1]
, когдаi = 0, j = 0
. - Он записывает
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
нем, и заменяете его arr[0][1]
.
Следовательно , код, как вы написали, возвращает либо последнее число, либо 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
}
}