找到2d数组的最大大小

时间:2014-12-16 19:40:46

标签: c arrays 2d

我被要求在C中创建一个程序,其中将采用2d数组。 3个数字,每次都会找到一个数字的持久性乘以它直到我们只有一个数字。然后,每个数字的结果将存储在数组的第二行。

例如

例如,数字2736的持久性为0:首先我们找到2 * 7 * 1 * 6 = 252,然后是2 * 5 * 2 = 20,最后是2 * 0 = 0,我们得到一位数。 (在该示例中为0)。

数组的数字将来自txt文件,格式如下:

2716 2720

因此数字将为[2716,2720] : 2176 2177 2178 2179 21720

每个持久性的图形表示都是

Number | Persist
-----------------
  2716  |    3
  2717  |    4
  2718  |    2
  2719  |    3
  2720  |    1

以及之后的数组:

 array[5][2] = { {2716,3}, {2717,4}, {2718,2}, {2719,3}, {2720,1} };

所以最后我需要找到maxinum persistanse的数字(在我的例子中是2717)并将其打印到一个名为persist.out的txt文件中,其行和列如下:

2717 4

我的问题是复制数组的最后一部分。

此外,我们需要检查多个数字是否具有更大的持久性,然后找到最大数量。

我为最后一部分编写了一个代码但是不是很稳定,我无法进行我想要的检查。

已更新!

#include <stdio.h>

int multiply_digits(int x)
{
  int z = 1;
  while ( x )
  {
    z *= x % 10;
    x /= 10;
  }

  return z;
}



int main() {

    int a;
    int b;

    FILE *input, *output;

    input = fopen("persist.in","r");
    fscanf(input,"%d %d",&a, &b);
    fclose(input);


    int c = (b - a) + 1;

    int array[c][2];



    array[0][0] = a;

    for(int i = 1; i < c; i++)
    {

        array[i][0] = a + i;

    }



     int i, j;
    for (i=0; i< c; ++i)
    {
        int n = array[i][0];
        int j = 0;
            while (n>9)
            {
            n = multiply_digits(n);
            j++;
            }
        array[i][1] = j;
    }



    for (i = 0; i < c; i++)
    {
        for (j = 0; j < 2; j++)
        {
       printf("%d ", array[i][j]);
        }
    printf("\n");
    }

    printf("\n");

    int indexOfMaximum;
    int maximum = array[0][1];
    for (i = 0 ; i < c ; ++i ) 
    {

      if ( array[i][1] >= maximum ) {
    maximum = array[i][1];
    indexOfMaximum = i;
    }
    } 


}

2 个答案:

答案 0 :(得分:2)

for循环中,您的停止条件为i <= c,因为您的起始索引为i < c

,所以它应为0

您的数组被声明为int array[c][2]所以您正在读取数组的末尾我假设垃圾值实际上可能大于maximum,如果您想要达到{{1}然后声明c

至于将其写入文件部分只需执行

int array[1 + c][2]

希望它对你有所帮助。

答案 1 :(得分:1)

您需要将最后一个if语句中的条件更改为&gt; =以便实际获得最大值。使用您的代码,如果更多的持久性出现多次,您将只找到第一个。

if ( array[i][1] >= maximum ) {
    maximum = array[i][1];
    indexOfMaximum = i;
}
相关问题