a)Write a procedure void fill (int * x, int len) . User loads
integer k, and then with random numbers from
segment [1, k] fill a array x that has a length len

b)Two numbers are amicable if they have the same number of odd digits. For example, numbers 1245 i 22 are amicable, but 23 i 5 are not amicable… Write a C function NumberOfAmicables(int *x, int n) which returns how many sets with three amicable members are there.. For example.. If array is {12,235,5,51,128,777,4}, function returns 1 because sets with three amicable members are: (12,235,4)..


I'm thinking about doing it this way, but are there any better, simply methods? Please help me. Thanks in advance.

Code:
 void Fill(int *x, int len)
{
    int k;
    printf("Enter the number k: ");
    scanf("%d", &k);

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


int Amicable(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 NumberOfAmicables(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 (Amicable(x[i], x[j])&&Amicable(x[i],x[k]))
                {
                    br++;
                    printf("(%d, %d, %d), ", x[i], x[j], x[k]);

                }
            }



        }
    }
    return br;
}
int main()
{   


    int len=0;
    printf("Len. of array? : ");
    scanf("%d", &len);
    int* x = malloc(len*sizeof(int));
    Fill(x, len);
    printf("Number of sets with three amicable members :%d\n", NumberOfAmicables(x,len));


    return 0;
}