2016-01-12 3 views
-7

Я написал программу для него, но иногда я получаю неправильный ответ. Пожалуйста, помогите мне (x и y - индекс)Найти абсолютно максимальное значение в 2D-массиве C++

int main() 
{ 
int a[1000][1000]; 
int n,m,i,j,max,k,max1,x,y; 
cin>>n>>m; 
for(i=0;i<n;i++) 
{ 
    for(j=0;j<m;j++) 
    { 
     cin>>a[i][j]; 
    } 
} 

max=a[0][0]; 
max1=abs(max); 
for(i=0;i<n;i++) 
{ 
    for(j=0;j<m;j++) 
    { 
     if(abs(a[i][j])>=max1) 
     { 
      max=a[i][j]; 
      k=max; x=i; y=j; 
     } 
    } 
} 
cout<<k<<endl<<x<<" "<<y; 
} 
+3

Некоторые отступы в вашем коде будут полезны. – NathanOliver

+0

Скобки для петель также помогут. –

+0

@ SelçukCihan, хотя я согласен с тем, что наличие скобок для нетривиальных циклов целесообразно, здесь не является источником ошибок. – ForeverStudent

ответ

2

Вы не обновляете max1 внутри, если условие.

1

Ваша логика несколько неясна. Почему вы беспокоитесь об абсолютных значениях? Если вы хотите получить значение с наивысшим абсолютным значением, то вы должны обновить max1 внутри цикла for, поскольку вы используете его, чтобы решить, нужно ли вам новое значение.

if(abs(a[i][j])>=max1) 
     { 
      max=a[i][j]; 
      k=max; x=i; y=j; 
      max1=abs(a[i][j]); //update the absolute value max 
     } 
1
for (j = 0; j<m; j++ 
    if (abs(a[i][j]) >= max1) 
    max = a[i][j]; 
    k = max; x = i; y = j; 
    } 
cout << k << endl << x << " " << y; 

}

изменения: если (ABS (а [I] [J])> = max1) ------> max1 = а [I] [J]. вы каждый раз сравниваете абс ti то же фиксированное число max1, которое не изменяется.

Смежные вопросы