я не могу понять, в чем проблема в моем коде, который делает вывод неправильно? - PullRequest
0 голосов
/ 26 апреля 2020

Я хочу написать C функцию, которая принимает массив и его размер в качестве входных данных и возвращает элемент массива, который повторяется нечетное количество раз. В приведенном ниже коде выходные данные должны быть равны 3, поскольку число 3 повторяется нечетное число раз, но выходное значение равно 1, и я не могу найти ошибку.

#include <stdio.h>
#define size 15
int array_oddrepretition(int * ptr , int n);

int main()
{   int res;
    int arr[]={1,2,3,1,2,3,1,1,1,1,3,3,3};
    res=array_oddrepretition(arr, size);
    printf("Number is : %d",res);
    return 0;
}

int array_oddrepretition(int * ptr , int n)
{ 

    int i,j,count=0,index=0;

    for(i=0 ; i<size ; i++)
    {
        for(j=i+1 ; j<size ; j++)
        {
           if(ptr[i]==ptr[j])
           {   
               index=i;/* to be able to return the value of this number*/
               count++;

           }
        }
        /*so if ptr[j] != ptr [i] we need to check if it odd or not 
        *if odd break; and return num  * if even reset he count and start i=1*/
        if(count %2 != 0)
         {
            break;
          }
          /* reset the count value before check for the next array element */
         count=0;
    }  

    return ptr[index];

}

1 Ответ

4 голосов
/ 26 апреля 2020

Когда вы вставите j в установленное значение l oop, это j = i + 1, что приведет к ошибке, поскольку вы не будете проверять сам индекс, поэтому он будет учитываться как 3, а не 4, так как первый счет не будет засчитан поэтому результат будет 1, а не 3 * / поэтому вы должны поставить j = 0, и он будет работать успешно

#include <stdio.h>
#define size 15
int array_oddrepretition(int * ptr , int n);

int main()
{   int res;
    int arr[]={1,2,3,1,2,3,1,1,1,1,3,3,3};
    res=array_oddrepretition(arr, size);
    printf("Number is : %d",res);
    return 0;
}

int array_oddrepretition(int * ptr , int n)
{ 

    int i,j,count=0,index=0;

    for(i=0 ; i<size ; i++)
    {
        for(j=0 ; j<size ; j++)
        {
           if(ptr[i]==ptr[j])
           {   
               index=i;/* to be able to return the value of this number*/
               count++;

           }
        }
        /*so if ptr[j] != ptr [i] we need to check if it odd or not 
        *if odd break; and return num  * if even reset he count and start i=1*/
        if(count %2 != 0)
         {
            break;
          }
          /* reset the count value before check for the next array element */
         count=0;
    }  

    return ptr[index];

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...