Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: mały problem z pętlą  (Przeczytany 3274 razy)

kordi

  • Gość
mały problem z pętlą
« dnia: 2014-02-14, 17:18:16 »
Mam tablice z liczbami 6x6 i chciałabym znaleźć njwiększy iloczyn 3 liczb idąc tylko w stronę horyzontalną.
Np. mamy pierwszy wiersz liczb:
8, 2, 22, 97, 38, 15

Czyli szukam takich iloczynow: 8*2*22 ; 97*38*15, itd...
Nie moge poradzic sobie z pętlą, która również będzie szukała takich trójek liczb:
2*22*97; 22*97*38; itd;
wprowadziłam dodatkową pętlę do .. while, ale niestety nie otrzymalam zamierzonego efektu.
Czy mogłabym prosić o jakieś wskazówki?

Ooto moje wypociny:
int *grid[6][6];
    int tab[36] = {8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8, 49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43,    69, 48};

    int N = 6;
    for (int i = 0; i < 6; i++){
        for (int j = 0; j < 6; j++){
            grid[i][j] = &tab[i*N+j];
                        //cout << "T["<        }
    }
long int product = 1;
    long int final_product = 0;
    int counter = 0;
    int counter2 = 0;

    do{
    for (int i = 0; i < 6; i++){
        for (int j = counter2; j < 6; j++){
            product = product * (*grid[i][j]);
            cout << "P= " << product << endl;
            counter++;
            cout << "Licznik = " << counter << endl;
            if (counter%3 == 0){
                if(product > final_product){
                    final_product = product;
                }
                    product  = 1;
                    counter = 0;

            }
        }
            counter2++;
            cout << "COUNTER2 =" << counter2 << endl;
    }
}while (counter2==5);
    cout << "The biggest product = " << final_product;

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3056
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
mały problem z pętlą
« Odpowiedź #1 dnia: 2014-02-14, 19:04:54 »
Żeby nie było, że niepedagogiczne, są komentarze (i akurat wiem, że to nie zadanie domowe :) )

#include 

using namespace std;

int main() {

    const int WIERSZE=6;
    const int KOLUMNY=6;
    const int ILOCZYNY=3;


    int wiersz, kolumna, liczba;

    long int najw_wart, iloczyn;
    int najw_poz;

    // Tablice dwuwymiarowe można tak:

    static const int grid[WIERSZE][KOLUMNY] =
    {
        { 8,  2, 22, 97, 38, 15},
        { 0, 40,  0, 75,  4,  5},
        { 7, 78, 52, 12, 50, 77},
        {91,  8, 49, 49, 99, 40},
        {17, 81, 18, 57, 60, 87},
        {17, 40, 98, 43, 69, 48}
    };

    for(wiersz=0;wiersz        // Zerujemy najwyższą wartość.
        // Liczby są nieujemne, więc iloczyn będzie co najmniej równy 0
        najw_wart = -1;

        // Mnożymy "ILOCZYNY" liczb, więc _początki_ trójek są co najwyżej w
        // kolumnie KULUMNY-ILOCZYNY (w naszym przypadku 3 licząc od 0)
        for(kolumna=0; kolumna<=KOLUMNY-ILOCZYNY;kolumna++) {
            // Każdą paczkę liczb liczymy od nowa
            iloczyn=1; // Nie 0 !

            // Wymnóż ILOCZYNY liczb od pozycji "kolumna" do pozycji
            // "kolumna"+ILOCZYNY-1
            for(liczba=0;liczba                iloczyn*=grid[wiersz][kolumna+liczba];

            // Jeżeli iloczyn jest większy od już znalezionego, to zapamiętaj
            // jego wartość i pozycję.
            if(iloczyn>najw_wart) {
                najw_wart = iloczyn;
                najw_poz = kolumna;
            }
        }

        // Po zakończeniu analizy wiersza, wyświetl wynik.
        cout<<"Najwyższy iloczyn w wierszu "<< wiersz+1 << " to "
          << najw_wart << " (od kolumny " << najw_poz+1 << " do "
          << najw_poz+3<<")"<
    }
}
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
mały problem z pętlą
« Odpowiedź #2 dnia: 2014-02-15, 11:40:15 »
Skoro to iloczyn, to czy nie lepiej wyszukać po prostu trzech największych liczb w wierszu? I na końcu przemnożyć je przez siebie?

kordi

  • Gość
mały problem z pętlą
« Odpowiedź #3 dnia: 2014-02-15, 21:09:19 »
Świetna robota! Wielkie dzięki za pomoc! :)

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3056
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
mały problem z pętlą
« Odpowiedź #4 dnia: 2014-02-16, 09:13:39 »
Cytat: ultr
Skoro to iloczyn, to czy nie lepiej wyszukać po prostu trzech największych liczb w wierszu? I na końcu przemnożyć je przez siebie?
Słówko-klucz: 3 kolejnych liczb.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy