我被要求用 C 创建一个程序,其中将采用一个二维数组,例如。 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)并将其 fprintf 到一个名为 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;
}
}
}
最佳答案
在你的for
循环,你的停止条件是i <= c
应该是i < c
因为你的起始索引是 0
您的数组声明为 int array[c][2]
所以你正在阅读数组的末尾我假设一个垃圾值实际上可能大于 maximum
, 如果你想上升到 c
然后声明int array[1 + c][2]
.
至于写入文件部分就行了
fprintf(output, "%d %d\n", array[indexOfMaximum][0], array[indexOfMaximum][1]);
希望对你有帮助。
关于c - 查找二维数组的最大大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27512591/