Wpis z mikrobloga

Potrzebuję zsumować każde dwa elementy w tablicy i wynik zapisać w drugiej tablicy, jednak nie mogę wykombinować poprawnej pętli. Co mam:

for (i = 0; i < 4; i++) {
for (j = i + 1; j < 4; j++) {
B[j + i - 1] = A[i] + A[j];
}
}

Poprawnie zapisuje sumy pierwszego i ntego elementu, jednak już przy sumie 2 i 3 elementu nadpisuję sumę 1 i 4.
Chcę to zrobić dla dowolnego rozmiaru tablicy, więc nie chcę robić po prostu 6 przypisań. Dacie jakąś wskazówkę?

#cpp #naukaprogramowania #programowanie
  • 17
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@wytrzzeszcz: Pierwszy z drugim, pierwszy z trzecim, ... , drugi z trzecim itd.
Permutacja bez powtórzeń, n po k, tutaj dokładniej n po 2 - i suma każdej pary.

@Rissiel, tylko różne. Tzn bez powtórzeń, nie potrzebuję dwa razy tej samej ceny.
  • Odpowiedz
@lerner: Chyba nie do końca, suma[] ma inny rozmiar niż elements[]. Przykładowo dla 4 elementów potrzebuję tablicy 10 elementowej na sumy.
  • Odpowiedz
@lerner: Liczbę kombinacji już mam obliczoną iteracyjnie, ale w jaki sposób potem z każdej kombinacji zsumować elementy i wpisać je do innej tablicy?
  • Odpowiedz
@Rissiel: Nie do końca Cię rozumiem, jak mam ją pokazać? W poście jest to tablica A, ale jej rozmiar nie jest określony, tutaj dla przykładu dałem tylko 4.
  • Odpowiedz
A coś takiego nie może być? IMO czytelniejsze:

int k = 0;
for (int i = 0; i < 4; i++) {
for (int j = i+1; j < 4; j++) {
B[k] = A[i] + A[j];
  • Odpowiedz
@Battis: nie rozumiem po co kombinowanie, jak nie chcesz liczyć jakiego rozmiaru jest tablica to nie licz - użyj wektora i upychaj wartości po kolei, przykład:

std::vector B;
for (i = 0; i < 4; i++) {
for (j = i + 1; j < 4; j++) {
B.push_back(A[i]
  • Odpowiedz
@bordeaux: Do czegoś takiego właśnie dążyłem, oczywiście może być, dzięki wielkie :)
@rotflolmaomgeez: to też jest bardzo dobry pomysł, ale chciałem żeby ten sposób był kompatybilny ze zwykłym C, w dodatku ze standardem C90. Ale dziękuję za wskazówkę, będę pamiętał o tym.
Dzięki!
  • Odpowiedz