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;
}
#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?