[ melina7 @ 02.01.2011. 12:59 ] @
Prirodni brojevi od 1 do 37 su zapisani u jedan red tako da je zbir prvih nekoliko brojeva djeljiv sledećim brojem. Koji je broj na 3 mjestu ako je na prvom mjestu broj 37, a na drugom 1 ?
pls mala pomoć ili uputa kako da počnem :)
[ Markonio @ 02.01.2011. 13:22 ] @
Prvih "nekoliko" brojeva? Koliko? Svaki broj u nizu deli zbir svih prethodnih brojeva?
[ melina7 @ 02.01.2011. 14:36 ] @
nije rečeno koliko! ovo je cijeli text ..
[ Fermion @ 02.01.2011. 15:08 ] @
Pošto zbir prva dva iznosi 38, a sledeći broj je njegov dellac onda je to ili 19 ili 2. Treba i da se dokaže da je preostale prirodne brojeve od 1 do 37 moguće rasporediti na način da zbir svakih nekoliko prvih brojeva bude deljiv narednim, a da se pri tom svi brojevi od 1 do 37 pojavljuju samo jednom.
[ Nedeljko @ 02.01.2011. 17:11 ] @
Neka je poslednji broj u nizu i neka je . Tada , odnosno , pa mora biti . Pošto je 19 na poslednjem mestu, na trećem mora biti 2.
[ Fermion @ 02.01.2011. 17:41 ] @
Zato i rekoh da treba ispitati da li je moguć takav raspored. Ja sam pokazao da je moguće da broj bude samo 2 i 19, vi ste odbacili 19, što pokazuje da sledeći broj mora biti 2. Ali to i dalje ne znači da je moguće preostale brojeve rasporediti tako da uslov zadatka bude zadovoljen. Drugim rečima ako je neki broj rešenje onda je to 2, ali to ne znači da jeste.
[ Nedeljko @ 02.01.2011. 17:52 ] @
Postoji rešenje

37, 1, 2, 4, 11, 5, 3, 7, 14, 6, 15, 35, 28, 8, 22, 33, 21, 18, 27, 9, 34, 20, 12, 31, 13, 32, 16, 29, 17, 30, 10, 25, 23, 26, 24, 36, 19

koje ispaljuje sledeći program

Code:
#include <iostream>
#include <cstdlib>

using namespace std;

int niz[37];

bool izracunaj(int n, int s) {
    if (n == 37) {
        return true;
    }

    for (int k = 1; k <= 37; ++k) {
        int i;

        for (i = 0; i < n; ++i) {
            if (niz[i] == k) {
                break;
            }
        }

        niz[n] = k;

        if (i == n && (s%k == 0) && izracunaj(n + 1, s + k)) {
            return true;
        }
    }

    return false;
}

int main() {
    niz[0] = 37;
    niz[1] = 1;

    if (izracunaj(2, 38)) {
        for (int i = 0; i < 37; ++i) {
            if (i > 0) {
                cout << ", ";
            }
            cout << niz[i];
        }

        cout << "." << endl;
    } else {
        cout << "Nema resenja" << endl;
    }

    return EXIT_SUCCESS;
}