Помощ със задача на C++
Здравейте, имам нужда от помощ да си намеря грешка в задача на C++. Условието е: Дефинираме Двумерен статичен масив. [m][n] от цели числа (тип int).Масива представлява поле и във всяка клетка има толкова боровинки колкото е голямо числото в нея. Човече тръгва от горния ляв ъгъл([0][0]) и се движи САМО надясно и надолу. Колко е максималният брой боровинки, който човечето може да събере докато стигне до клетка [m][n].
Може да бъде решена и със указатели, динамични обекти, цикли така че ако някой има идеи за решение с някое от тях моля да сподели.
ето го моят код. Масивът и максималният брой колони и редове са инициализирани, но както всички знаем има ограничение за дължината на кода затова качвам останалата част от него:
int MaxBorovinki;
MaxBorovinki=Pole[0][0];
for (i= 0; i<n; i++)
{
for(j=0; j<m; j++)
{
if ((Pole[i][j+1])>(Pole[i+1][j]))
MaxBorovinki+=Pole[i][j+1];
else
MaxBorovinki+=Pole[i+1][j];
}
}
cout<<MaxBorovinki;
Благодаря за забележките, ще помисля още и мисля че ще успея да се справя с тези насоки. :)
Само едно въпросче- преди да влезем във for-а присвояваме стойността на нулевия елемент на MaxBorovinki . След това добавяме към тази стойност и тази на съответно по-големия елемент (в тази част вероятно имам грешки). Така не се ли брои и нулевия елемент?
Ако бъркам моля кажете какво имате в предвид за да не повтарям същата грешка. :)
А по въпроса в движението при всички положения човечето се движи или на зиг-заг или в права линия защото няма право да се движи подиагонал.
Въпросът ми беше дали човечето ще се премести там където са повечето боровинки т.е. при матрица
1 2 3 4
1 1 5 2
Трябва да направи първо 2 хода на дясно, докато стигне [3] После един надолу и един неизбежно надясно, защото няма надолу.
Нали така?
Тогава би изглеждало нещо такова (не гарантирам за вярност на синтаксиса):
int x = 0;
int y = 0;
int blueberries = pole[0][0]
while (x < sizeof(pole) && y < sizeof(pole[x])) {
if (pole[x][y+1] > pole[x+1][y]) {
blueberiies += pole[x][y+1];
y++;
} else {
blueberiies += pole[x+1][y];
x++;
}
}
Като може би ще ти трябват две допълнителни условия в while-а. Ако си стигнала до най-дясно, да не прави проверки, а да слиза само надолу. Ако си стигнала до най-долу, да не прави проверки а да се движи само надясно.
Има лийк в този код и това е, както посочих по-рано, ако и дясната и долната позиция са еднакви. Тогава ще влезе в else-а, т.е. ще тръгне надолу.
P.S.: Не бях видял, че инициализираш боровинките с pole[0][0]. Видях само int MaxBorovinki. Да, права си, брои се.