[ Stevan_Chakic @ 04.11.2013. 23:14 ] @
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? |