- Член од
- 6 јуни 2009
- Мислења
- 3.094
- Поени од реакции
- 445
Чудно ви е дека бројачот се апдејтира во индексите на матрицата? Па добро една задача има милион начини како да се реши. На тој начин можеш многу манипулации да направиш во матрицата.
Еве на пример направив и збирот на споредната дијагонала, друг начин за споредната дијагонала бар сега во моментот не ми текнува.
Код:total=0; for (i=n-1;i>=0;) for (j=0;j<m;) { total=total+matrica[i--][j++]; }
Финтава е ефикасно решение. Во твојот код за главна дијагонала се добива линеарно изминување ама имаш два фора, два услови и две променливи (плус променливите за големината на матрицата кои се задолжителни). Тоа е многу поефикасно од квадратно изминување со проверка i==j, ама уште поефикасно е со еден фор, еден услов и една променлива.
За споредна дијагонала најефикасно би било решение со еден фор, еден услов и две променливи. А можи да се реши и со една променлива.
Код:
for (int i=0, j=n-1; i<n; i++, j--)
{
...
matrica[i][j]
}
Со една променлива
Код:
for (int i=0; i<n; i++)
{
...
matrica[i][n-i-1]
}
За вакви едноставни работи уште од прва (или втора понекогаш) треба да се напиши ефикасно решение. За посложени проблеми важи она „направи го да работи, па оптимизирај го“.