C - Co realizuje ta funkcja?

C - Co realizuje ta funkcja?
MA
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 9 lat
  • Postów:10
0

Witam,
Jestem nowy na forum - witam wszystkich.

Mam prośbę, mógłby ktoś powiedzieć co realizuje i w jaki sposób ta funkcja? Z góry dziękuję za pomoc.
Ps. Mógłby ktoś mi opisać o co chodzi z **? Czy taki zapis oznacza macierz?

Kopiuj
 int solution(int **A, int N, int M) {
 int i, j;
  int leftsum, rightsum;

  for ( i = 0; i < N; ++i)
  {
    leftsum = 0;  
    rightsum = 0;
 
			for (j = 0; j < i; j++)
			leftsum += A[j];
 
					for( j = i+1; j < N; j++)
					rightsum += A[j];
 
					if (leftsum == rightsum)
					return i;
    }

  return 2;
}
R3
  • Rejestracja:ponad 11 lat
  • Ostatnio:dzień
  • Postów:419
0

czy jest to rozwiazanie problemu equi o złożoności czasowej O(n^2) http://blog.codility.com/2011/03/solutions-for-task-equi.html ?

MA
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 9 lat
  • Postów:10
0

a mógłbyś coś więcej powiedzieć o tym i po Polsku? ;) to jest znajdowanie jakiejś zależności w macierzy chyba.

L0
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 2 lata
0

ten kod jest chyba przede wszystkim błędnie napisany. argument funkcji jest taki:

Kopiuj
int **A

więc to będzie sumować jedynie wartości adresów poszczególnych elementów tablicy:

Kopiuj
leftsum += A[j];

jak się domyślam, brakuje jeszcze indeksu [i].
albo nie. nie przeanalizowałem co robi ten algorytm. pozbądź się jednej gwiazdki(*) w pierwszym argumencie i usuń 3 argument, którego i tak nie używasz i będziesz miał chyba to samo co w linku podanym powyżej.

masiw napisał(a):

Ps. Mógłby ktoś mi opisać o co chodzi z **? Czy taki zapis oznacza macierz?

jest to wskaźnik na wskaźnik. może to być macierz.

edytowany 2x, ostatnio: ly000
0
  • to zazwyczaj wskaznik na tablicę, zapis wygląda w ten sposób ponieważ tablice w C są traktowane jak wskazniki
0
masiw napisał(a):

Witam,
Jestem nowy na forum - witam wszystkich.

Mam prośbę, mógłby ktoś powiedzieć co realizuje i w jaki sposób ta funkcja? Z góry dziękuję za pomoc.
Ps. Mógłby ktoś mi opisać o co chodzi z **? Czy taki zapis oznacza macierz?

int solution(int **A, int N, int M) {
int i, j;
int leftsum, rightsum;

for ( i = 0; i < N; ++i)
{
leftsum = 0;
rightsum = 0;

		for (j = 0; j < i; j++)
		leftsum += A[j];

				for( j = i+1; j < N; j++)
				rightsum += A[j];

				if (leftsum == rightsum)
				return i;
}

return 2;
}

Kopiuj


To nie jest poprawny kod...

Tablice dwuwymiarowe indeksujesz dwoma liczbami, tz. tak: A[i,j];

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.