поиск чисел Капрекара внутри 2D-массива в C - PullRequest
0 голосов
/ 27 мая 2020

Мне нужна функция, чтобы узнать числа Капрекара внутри этого 2-мерного массива, я искал в Интернете, но ни один из результатов не работал для 2D-массива.

Это массив, который я создал:

int **matrix;
int row, column;
long s, k;

srand(time(NULL));
printf("Number of rows: ");
scanf("%d", &row);

printf("Number of column: ");
scanf("%d", &column);


matrix = (int **) calloc(row, sizeof(int*));


for(i = 0; i < row; i++)
    matrix[i] = (int *) calloc(column, sizeof(int));


for(s = 0; s < row; s++)
{
    for(k = 0; k < column; k++)
    {

        matrix[s][k]=(rand()%1000) * (rand()%1000);
    }
}

любая помощь или предложения по преобразованию этого кода для работы с 2D-массивом?

bool iskaprekar(int n) 
{ 
    if (n == 1) 
       return true; 


    int sq_n = n * n; 
    int count_digits = 0; 
    while (sq_n) 
    { 
        count_digits++; 
        sq_n /= 10; 
    } 

    sq_n = n*n;  


    for (int r_digits=1; r_digits<count_digits; r_digits++) 
    { 
         int eq_parts = pow(10, r_digits); 

         if (eq_parts == n) 
            continue; 


         int sum = sq_n/eq_parts + sq_n % eq_parts; 
         if (sum == n) 
           return true; 
    } 


    return false; 
} 

1 Ответ

1 голос
/ 27 мая 2020

У вас есть 2D-массив, у вас также есть функция, которая проверяет, является ли число Капрекаром или нет. Самый простой способ - использовать for l oop для проверки всех чисел в 2D-массиве, как вы это делали при инициализации значений массива с помощью функции rand().

for(s = 0; s < row; s++) {
   for(k = 0; k < column; k++) {
      if(iskaprekar(matrix[s][k])) {
          printf("%d ", matrix[s][k]);
      } 
   }
}

, если вы хотите сохранить все числа Капрекара, вы можете использовать указатель, а затем перераспределять для него каждый раз, когда вы встречаете одно число Капрекара. Затем удалите повторяющиеся числа, если хотите.

int * numbers = 0;
if(!numbers) {return -1;}
int count = 0;
for(s = 0; s < row; s++) {
   for(k = 0; k < column; k++) {
      if(iskaprekar(matrix[s][k])) {
          numbers = realloc(numbers, sizeof(int) (count+1));
          if(!numbers) {return -1;}
          numbers[count] = matrix[s][k];
          count++;
      } 
   }
}

// Remove the duplicated numbers here, if you want
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...