gpt4 book ai didi

C语言。如何找到最大最小值。 (二维数组)

转载 作者:太空宇宙 更新时间:2023-11-03 23:42:54 24 4
gpt4 key购买 nike

我编写的代码允许您输入 NxN double 组的一维。然后它将在二维数组中打印随机数,并找到每行的最大数和最小数。然后打印它们及其坐标(行和列)。

注意!!!!我更改了我的代码,使其找到最大值中的最小值。我现在不知道如何找到它的坐标

我的代码如下:

int N, i, j, min=1000, max, m , o;
time_t t;
int masyvas[100][100], minmax[100];
printf("Enter one dimension of a NxN array\n");
scanf("%d", &N);



srand((unsigned) time(&t));
for (i=0; i<N; i++)
{
for (j=0; j<N; j++)
{
masyvas[i][j] = rand() % 10;
printf("%4d", masyvas[i][j]);

}
printf("\n");
}




int k, l, idkeymax, idkeymin;
for(k=0; k<N; k++)
{

max=-1000;
for(l=0; l<N; l++)
{
if(max<masyvas[k][l])
{
max=masyvas[k][l];

}

}
minmax[k]=max;

}
for(m=0; m<N; m++)
{if(minmax[m]<min)
min=minmax[m];
}

printf("maziausias skaicius tarp didziausiu yra %d eiluteje %d stulpelyje %d\n",min);

最佳答案

这是您需要执行的操作的伪代码。

for row in grid {
row_max = max_in_row(row)
grid_min = min(grid_min, row_max)
}

第一步是编写一个例程来查找列表中的最大值和位置。您可以将其作为一个大函数来执行,但它更容易理解和分段调试。

您还需要找到它的索引。由于 C 不能返回多个值,我们需要一个结构来存储数字/索引对。任何时候你创建一个结构,创建例程来创建和销毁它。对于像这样微不足道的事情,这似乎有些过分,但它会使您的代码更易于理解和调试。

typedef struct {
int num;
size_t idx;
} Int_Location_t;

static Int_Location_t* Int_Location_new() {
return calloc(1, sizeof(Int_Location_t));
}

static void Int_Location_destroy( Int_Location_t* loc ) {
free(loc);
}

现在我们可以编写一个小函数来查找一行中的最大数量和位置。

static Int_Location_t* max_in_row(int *row, size_t num_rows) {
Int_Location_t *loc = Int_Location_new();

/* Start with the first element as the max */
loc->num = row[0];
loc->idx = 0;

/* Compare starting with the second element */
for( size_t i = 1; i < num_rows; i++ ) {
if( row[i] > loc->num ) {
loc->num = row[i];
loc->idx = i;
}
}

return loc;
}

我没有从任意最大值或最小值开始,而是使用了一种替代技术,我将最大值设置为第一个元素,然后从第二个元素开始检查。


现在我有了一个函数来查找一行中的最大值,我现在可以遍历它,获取每一行的最大值,并将它与整个表的最小值进行比较。

int main() {
int grid[3][3] = {
{10, 12, 15},
{-50, -15, -10},
{1,2,3}
};

int min = INT_MAX;
size_t row = 0;
size_t col = 0;

for( size_t i = 0; i < 3; i++ ) {
Int_Location_t *max = max_in_row(grid[i], 3);
printf("max for row %zu is %d at %zu\n", i, max->num, max->idx);

if( max->num < min ) {
min = max->num;
col = max->idx;
row = i;
}

Int_Location_destroy(max);
}

printf("min for the grid is %d at row %zu, col %zu\n", min, row, col);
}

我使用了不同的技术来初始化最小位置,因为获得第一个最大值需要在循环中重复一些代码。相反,我将 min 设置为可能的最低整数,INT_MAX 来自 limits.h这是最高可能的整数。这允许代码与任何整数范围一起使用,没有任何限制。这是使用最小/最大算法时非常常用的技术。

关于C语言。如何找到最大最小值。 (二维数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40918547/

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