eGospodarka.pl
eGospodarka.pl poleca

  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: "M.M." <m...@N...gazeta.pl>
    Newsgroups: pl.comp.programming
    Subject: Sumowanie
    Date: Mon, 16 Jan 2012 11:02:34 +0000 (UTC)
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 62
    Message-ID: <jf1049$7pn$1@inews.gazeta.pl>
    NNTP-Posting-Host: localhost
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: 8bit
    X-Trace: inews.gazeta.pl 1326711754 7991 172.20.26.235 (16 Jan 2012 11:02:34 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Mon, 16 Jan 2012 11:02:34 +0000 (UTC)
    X-User: mariotti
    X-Forwarded-For: 89.229.34.123
    X-Remote-IP: localhost
    Xref: news-archive.icm.edu.pl pl.comp.programming:194718
    [ ukryj nagłówki ]

    Hey

    Jestem prawie pewny ze jest na to analityczny wzor. Przypomni
    ktos? Problem: na ile sposobow mozna zsumowac N liczb,
    tak aby kazdy skladnik byl z przedzialu domknietego <0,M> i
    suma zeby wynosila M. Oczywiscie chodzi o liczby calkowite.

    Przykladowe sumy dla N=3 i M=5
    5 + 0 + 0 = 5 // poprawna
    3 + 2 + 0 = 5 // poprawna
    2 + 2 + 1 = 5 // poprawna
    2 + 2 + 2 = 6 // niepoprawna
    2 + 2 + 0 = 4 // niepoprawna
    -1 + 6 + 0 = 5 // niepoprawna

    Dla liczb z przedzialu od 1 do M mozna to zadanie rozwiazac zamieniajac
    kodowanie binarne na kodowanie unarne. Np. na ile sposobow mozna zsumowac
    3 liczby aby uzyskac 10? Kreski to liczby kodowane unarnie, a dwukropki
    to separatory pomiedzy liczbami:
    ||:|||||:||| -> 2 + 5 + 3 = 10

    Teraz widac ze zadanie mozna przedefinowac:
    Na ile sposobow mozna rozstawic dwukropki pomiedzy kreskami?
    Mamy (9 nad 2) = 36

    A jak to rozwiazac jesli zera tez sa dozwolone? Ponizszy programik niby
    rozwiazuje, ale ma zlozonosc wykladnicza wzgledem (M+1) ^ N :/

    Pozdrawiam
    ----------------------------------------------------
    -------------------

    #include <cstdlib>
    #include <cstdio>

    #define MAX (8) // M
    #define DEPTH (10) // N

    typedef int ityp;
    typedef const int cityp;
    typedef unsigned int utyp;
    typedef const unsigned int cutyp;

    static utyp find( cutyp sum=0 , cutyp depth=0 ) {
    if( depth == DEPTH )
    return sum == MAX; // if( sum == MAX ) return 1; else return 0;
    utyp res = 0;
    for( ityp i=0 ; i<=MAX ; i++ )
    res += find( sum+i , depth+1 );
    return res;
    }

    int main( int argc, char *argv[] ) {
    utyp sum = find();
    printf("sum = %u\n",sum);
    return 0;
    }




    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: