Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pitanje u vezi zadatka,jezik C

[es] :: C/C++ programiranje :: C/C++ za početnike :: Pitanje u vezi zadatka,jezik C

[ Pregleda: 2222 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Stevan_Chakic
n/a
n/a
Podgorica

Član broj: 310273
Poruke: 10
*.crnagora.net.



Profil

icon Pitanje u vezi zadatka,jezik C04.11.2013. u 23:19 - pre 127 meseci
Tekst zadatka:
1.a) Napisati proceduru void Popuni(int *x, int len) koja od korisnika učitava
prirodan broj k, a zatim popunjava niz x dužine len slučajnim brojevima iz
segmenta [1, k].
b) Dva broja su prijateljska ako imaju isti broj parnih cifara. Na primjer, brojevi
1245 i 22 su prijateljski, dok 23 i 5 nijesu. Napisati funkciju int
BrPrijateljskihTrojki(int *x, int n) koja vraća koliko u nizu ima trojki
elemenata koji su prijateljski. Na primjer, ako je niz {12,235,5,51,128,777,4},
funkcija treba da vrati 5 jer su sljedeće trojke prijateljske
(12,235,128),(12,235,4), (12,128,4),(235,128,4) i (5,51,777)
U main funkciji učitati broj elemenata niza, a zatim dinamički alocirati memoriju
za niz (koristeći malloc funkciju). Popuniti niz primjenom procedure pod a), a zatim
primjenom funkcije pod b) naći traženi broj prijateljskih trojki.

Moje rjesenje:
Code:

#include <stdio.h>
#include <stdlib.h>

void Popuni(int *x, int len)
{
    int k;
    printf("Unesite broj k: ");
    scanf("%d", &k);

    int i;
    for (i=0; i<len; i++)
    {
        x[i] = (rand()%k) + 1;
    }
}


int prijateljski(int a, int b)
{

    int br1=0;
    int br2=0;
    while (a!=0)
    {
        if((a%10)%2==0)
        {
            br1++;
        }
        a=a/10;
    }
    while (b!=0)
    {
        if((b%10)%2==0)
        {
            br2++;
        }
        b=b/10;
    }
    if (br1==br2)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

int BrPrijateljskihTrojki(int *x, int n)
{
    int i=0;
    int j=0;
    int k=0;
    int br=0;

    for (i=0; i<n; i++)
    {
        for (j=i+1; j<n; j++)
        {
            for(k=j+1;k<n;k++)
            {
                if (prijateljski(x[i], x[j])&&prijateljski(x[i],x[k]))
                {
                    br++;
                    printf("(%d, %d, %d), ", x[i], x[j], x[k]);

                }
            }



        }
    }
    return br;
}
int main()
{   /*int test[] = {12, 235, 5, 51, 128,777,4};
    printf("%d", BrPrijateljskihTrojki(test,7));*/

    int len=0;
    printf("Unesite duzinu niza: ");
    scanf("%d", &len);
    int* x = malloc(len*sizeof(int));
    Popuni(x, len);
    printf("Broj prijateljskih trojki u gornjem nizu je %d\n", BrPrijateljskihTrojki(x,len));


    return 0;
}


Problem je sto mi se ponavljaju k-torke.Konkretno za n=15 i k=2 imam cak 91 prijateljsku k-torku umjesto dvije.Moze li neko pomoci?
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Pitanje u vezi zadatka,jezik C05.11.2013. u 08:48 - pre 127 meseci
Prvo, primer je pogrešan, nema 5 nego 2 prijateljske trojke, ali to si verovatno već i primetio.

Druge, ne traže se RAZLIČITE prijateljske trojke nego sve, tako da program radi kako treba.

Treće, svaki put kada pokreneš program, daje istu sekvencu slučajnih brojeva, jer nisi postavio seed za generator slučajnih brojeva, pa si verovatno primetio da svaki put dobijaš isti rezultat.

Evo primera kako se uobičajeno inicijalizuje random generator:

Code (c):

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

...

/* initialize random seed: */
srand (time(NULL));
 
 
Odgovor na temu

Stevan_Chakic
n/a
n/a
Podgorica

Član broj: 310273
Poruke: 10
*.crnagora.net.



Profil

icon Re: Pitanje u vezi zadatka,jezik C05.11.2013. u 18:46 - pre 127 meseci
Hvala.Ovo za test primjer zaboravio da izmijenim,pogresio bio profesor.Hvala za srand(),na to nisam obratio paznju .Bilo mi je malo cudno da stampa onoliko trojki za duzinu niza 15 i za k=2.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Pitanje u vezi zadatka,jezik C05.11.2013. u 18:55 - pre 127 meseci
Pošto u primeru imaš niz dužine 15, ukupan broj različitih trojki je odnosno 455. Verovatnoća da dođu 3 dvojke u nekoj trojci je 0.5*0.5*0.5=0.125, a ista tolika je verovatnoća da u trojci budu 3 jedinice, pa je očekivana vrednost broja prijateljskih trojki 455*0.25=113.75
 
Odgovor na temu

Stevan_Chakic
n/a
n/a
Podgorica

Član broj: 310273
Poruke: 10
*.crnagora.net.



Profil

icon Re: Pitanje u vezi zadatka,jezik C06.11.2013. u 13:46 - pre 127 meseci
Jasno sad u potpunosti :) Nisam se sjetio da iskoristim kombinatoriku i vjerovatnocu :)
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Pitanje u vezi zadatka,jezik C

[ Pregleda: 2222 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.