C 查找二维数组的最大大小

C 查找二维数组的最大大小,c,arrays,2d,C,Arrays,2d,我被要求用C语言创建一个程序,在这个程序中,我们将获取一个2d数组,例如3个数字,并通过每次相乘来找到一个数字的持久性,直到我们只得到一个数字。然后,每个数字的结果将被归档到数组的第二行 例如 例如,数字2736的持久性是0:首先我们发现2*7*1*6=252,然后是2*5*2=20,最后是2*0=0,我们得到一个位数。(在该示例中为0) 数组的数字将通过以下格式的txt文件给出: 2716 2720 因此,数字将是[27162720]:217621772178217921720 每一个持久性

我被要求用C语言创建一个程序,在这个程序中,我们将获取一个2d数组,例如3个数字,并通过每次相乘来找到一个数字的持久性,直到我们只得到一个数字。然后,每个数字的结果将被归档到数组的第二行

例如

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

数组的数字将通过以下格式的txt文件给出:

2716 2720
因此,数字将是
[27162720]:217621772178217921720

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

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;
    }
    } 


}
#包括
整数乘以整数(整数x)
{
intz=1;
while(x)
{
z*=x%10;
x/=10;
}
返回z;
}
int main(){
INTA;
int b;
文件*输入,*输出;
输入=fopen(“persist.in”,“r”);
fscanf(输入,“%d%d”、&a和&b);
fclose(输入);
int c=(b-a)+1;
整数数组[c][2];
数组[0][0]=a;
for(int i=1;i9)
{
n=乘法数字(n);
j++;
}
数组[i][1]=j;
}
对于(i=0;i=最大值){
最大值=数组[i][1];
indexofmax=i;
}
} 
}

for
循环的
中,停止条件是
i您需要将上一条if语句中的条件更改为>=以便实际获得最大值。对于您的代码,如果较大的persist出现多次,您将只找到第一个

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

问题是什么?我如何找到具有最大持久性的数字,以及如何将其行和列复制到txt文件中您必须检查
fopen
的结果。别担心,也许您是对的,但我的代码有效我的问题是另一个问题。另外,如果我把
i
放进去,那么我就错过了最后一个数字。如果你的代码起作用,那是偶然的。你修好并试过了吗?我的意思是你正在读取数组,之前的值应该是可以的,但是在查找最大部分时,它会引起麻烦。@GeorgeGkas严重吗?对于声明为dim
[n]
的数组,C允许从
0..(n-1)
进行索引。你的程序格式不正确。你是否选择相信这是无关紧要的;这仍然是事实。从格式错误的程序中得出的最常见的错误结论是认为观察到的行为就是定义的行为。一是赌博,;一个人遵守规则。你的是前者。老实说,这很简单;信念与此无关。可能是,您应该在
for
循环之前初始化
indexofmax
,否则它可能最终未初始化,为什么不测试代码以查看它是否有效?选中!但是,在这种情况下,我如何检查,以发现在这种情况下,更大的数字?编辑了答案。只需使用变量indexOfMaximum,最后的两个值是array[indexOfMaximum][0]和array[indexOfMaximum][1]我更新了我的问题,但我无法理解您的答案。请检查一下!数组的排序越来越多,在for循环的末尾,数组[indexOfMaximum][0]中的数字将是具有最高持久值的最大数字。如果X的persist=p且Y>X的persist也等于p,那么Y在循环中位于X之后,并且当p>=p为真时,indexofmax将成为Y的索引。是否更清晰?
if ( array[i][1] >= maximum ) {
    maximum = array[i][1];
    indexOfMaximum = i;
}