#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. спасибо, теперь он работает, но я не понял: (что вы подразумеваете под «вне диапазона»?