在C中的2D数组内查找Kaprekar数

问题描述 投票:0回答:1

我需要一个函数来查找此2d数组中的Kaprekar数,我在网上进行了搜索,但所有结果都不适用于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; 
} 
c multidimensional-array
1个回答
1
投票

您具有2D数组,还具有验证数字是否为Kaprekar的函数。简单的方法是使用for循环来检查2D数组中的所有数字,就像使用rand()函数初始化数组的值时所做的那样。

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

如果您要存储所有Kaprekar编号,则可以使用指针,然后在每次遇到一个Kaprekar编号后对其进行重新分配。然后根据需要删除重复的数字。

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
© www.soinside.com 2019 - 2024. All rights reserved.