gpt4 book ai didi

c - 如何将数组分解为固定大小的小数组? (在C中)

转载 作者:行者123 更新时间:2023-11-30 17:17:23 25 4
gpt4 key购买 nike

我试图在黑客排名中进行练习,但发现我的代码(如下)过于线性。为了使它更好,我想知道是否可以将数组分解为固定大小的小数组来完成此练习。

The Exersise on HackerRank

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {

int N, M, Y, X;
scanf("%d %d %d %d", &N, &M, &Y, &X);

int max = 0;
int total = 0;
int data[N][M];

for(int i = 0; i < N; i++)
{
for(int j = 0; j < M; j++)
{
scanf("%d",&(data[i][j]));
}
}


for(int i = 0; i < N; i++)
{
for(int j = 0; j < M; j++)
{
total = 0;

for(int l = 0; (l < Y) && (i + Y) <= N; l++)
{

for(int k = 0; (k < X) && (j + X <= M); k++)
{
total += data[i+l][j+k];
}

if(total > max)
max = total;
}
}
}

printf("%d",max);
return 0;
}

最佳答案

虽然将其“分解”成碎片意味着我们将在内存中移动内容,但您也许能够以等效的方式“查看”数组。

实际上,数组的名称只是指向第一个元素的指针。当您取消引用数组的元素时,数组映射函数用于执行指针算术,以便可以找到正确的元素。这是必要的,因为 C 数组本身没有任何指针信息来标识元素。

但是,您可以利用数组存储方式的本质将数据视为任意大小的数组。例如,如果我们有:

int 整数[] = {1,2,3,4,5,6,7,8,9,10};

您可以将其视为单个数组:

for(i=0;i!=10;i++){ printf("%d\n", 整数[i]); }

但是从上面的数组开始,你也可以这样做:

int *iArray1, *iArray2;
iArray1 = integers;
iArray2 = integers + (5 * sizeof(int));
for(i=0;i!=5;i++){ printf("%d - %d\n", iArray1[i], iArray2[i]);}

通过这种方式,我们选择将数据查看为两个 5 项数组。

关于c - 如何将数组分解为固定大小的小数组? (在C中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29433373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com