Получение нежелательного вывода

#c

#c

Вопрос:

В этом коде я сталкиваюсь с очень неприятной проблемой.

У меня есть переменная с именем moves , для которой установлено начальное значение 0 . Я также объявил 2d-массив с именем a where i , который ссылается на его строку и j ссылается на его столбец.

Моя цель — увеличить значение переменной moves до тех пор, пока оба i j значения и не будут равны 2 .

Теперь значение i равно 0 и j 1 (задается пользователем), поэтому в основном значение moves должно быть = 3 .

Но мой вывод показывает значение moves is 5 .

Я думаю, что есть проблема в любом из операторов условий, используемых в этом коде ниже, но я не могу понять это.

 #include<stdio.h>
int main()
{
    int a[5][5];
    int i,j,moves=0;
    for(i=0;i<5;i  )
    {
        for(j=0;j<5;j  )
        {
            scanf("%d",amp;a[i][j]);
        }
    }
    for(i=0;i<5;i  )
    {
        for(j=0;j<5;j  )
        {
           if(a[i][j] == 1)
                break;
        }
        if(a[i][j] == 1)
            break;
    }
    
    //somethings wrong in these loops?
    while(i!=2)
    {
        // i = 0
        if(i<2)
        {
            i=i 1;
            moves=moves 1;
        }
        else if(i>2)
        {
            i=i-1;
            moves=moves 1;
        } 
    }

    while(j!=2) // j=1
    {
        if(j<2)
        {
            j=j 1;
            moves=moves 1;
        }
        else if(j>2)
        {
            j =j-1;
            moves=moves 1;
        }
    }
    printf("%d %d %d", moves, i, j);

}
 

  Participant's output

  5

 Jury's answer
  3
 Checker comment
  wrong answer 1st numbers differ - expected: '3', found: '5'
 

это проблема codeforces :https://codeforces.com/contest/263/problem/A

Комментарии:

1. Вы должны проверить значение i и j перед входом в первый while цикл. как указано в ответе MikeCAT, j может быть вне диапазона.

Ответ №1:

Второй if(a[i][j] == 1) в этой части

 for(i=0;i<5;i  )
{
    for(j=0;j<5;j  )
    {
       if(a[i][j] == 1)
        break;
    }
    if(a[i][j] == 1)
        break;
}
 

плохо, потому j что здесь может быть вне диапазона.

Так и должно быть if(j < 5 amp;amp; a[i][j] == 1) .

Комментарии:

1. спасибо, теперь он работает, но я не понял: (что вы подразумеваете под «вне диапазона»?