【问题标题】:How to Resize an Array of Values by Increasing or Decreasing the Frequency of its Elements in C如何通过增加或减少 C 中元素的频率来调整值数组的大小
【发布时间】:2016-05-11 16:14:34
【问题描述】:

新手又来了,对于这篇文章的家庭作业质量,我深表歉意。

我不确定我的标题是否完全合理,但我正在尝试将数组放大(或缩小,如有必要)一个变量整数,并且我正在寻求帮助以了解其背后的数学和逻辑。 (这应该类似于将对象放大或缩小 n 倍。)

例如,如果有一个 2x2 数组,像这样:

0   1   
2   3

我希望能够将它乘以 n = 2,并得到以下结果:

0   0   1   1   
0   0   1   1   
2   2   3   3   
2   2   3   3

我希望能够将 n 设置为任何值,并让它按此值“调整”数组的大小(行和列应该适当地增长和缩小。) 我的代码没有像我想象的那样工作,我希望有人可以为我分解它(或指导我到哪里可以找到正确执行此操作的信息)。 到目前为止,这是我能够做的事情,但随着我增加或减少调整大小的值而失败。 (我正在尝试将数组写入单独的文件):

 #define enn 2     //resize value.
 //fill the infile with an array contents.
int inArray[SIZE][SIZE];
int count = 0, row, column;
//intialize the array.
for (row = 0; row < SIZE; row++)
{
    for(column = 0; column < SIZE; column++)
    {
        inArray[row][column] = count;
        count += 1;
    }
}
//write to the infile.
for (row = 0; row < SIZE; row++)
{
    for(column = 0; column < SIZE; column++)
    {
        fprintf(infileptr, "%i\t", inArray[row][column]);
    }
    fputs("\n", infileptr);
} 
fclose(infileptr);
//write expanded array to outfile.

for (row = 0; row < SIZE; row++)
{
    for(column = 0; column < SIZE; column++)
    {
        for(int m = 0; m < enn; m++)
        {
            fprintf(outfileptr, "%i\t", inArray[row][column]);
        }
    }
    fputs("\n", outfileptr);

    for(column = 0; column < SIZE; column++)
    {
        for(int m = 0; m < enn; m++)
        {
            fprintf(outfileptr, "%i\t", inArray[row][column]);
        }
    }
    fputs("\n", outfileptr);
}
fclose(outfileptr);

感谢您的帮助!

【问题讨论】:

  • 哇,这对 APL 来说是一份完美的工作。 :)

标签: c arrays resize


【解决方案1】:

要增加数组的大小,您需要 4 个嵌套循环。仅打印列 enn 次是不够的,您还必须打印行 enn 次:

for ( row = 0; row < SIZE; row++ )
{ 
    for ( int n = 0; n < enn; n++ )
    {
        for ( column = 0; column < SIZE; column++ )
        {
            for ( int m = 0; m < enn; m++ )
            {
                fprintf( outfileptr, "%i\t", inArray[row][column] );
            }
        }
        fputs( "\n", outfileptr );
    }
}
fclose( outfileptr );

但您也可以使用 2 个循环来完成。您的表有SIZE*enn 行和SIZE*enn 列:

for ( row = 0; row < SIZE*enn; row++ )
{ 
    for ( column = 0; column < SIZE*enn; column++ )
    {
        fprintf( outfileptr, "%i\t", inArray[row/enn][column/enn] );
    }
    fputs( "\n", outfileptr );
}
fclose( outfileptr );

注意:外部循环打印表格的行。有SIZE 行,每行必须打印enn 次。每行以\n 结束。内部循环打印列,因为每一行都由列组成。有SIZE 列,每列必须为每行打印enn 次。该表有SIZE * enn * SIZE * enn 字段。

【讨论】:

  • 聪明!第一个解决方案更直观。
  • 谢谢!但是我如何直观地理解它背后的逻辑!这让我绊倒了很多次。
  • 我认为第一个解决方案需要一个 fputs("\n", outfileptr) 某处,但第二个工作正常。 @Rabbid76
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 2013-11-30
  • 1970-01-01
  • 2018-11-26
相关资源
最近更新 更多