我需要在2D数组的每一行中找到并打印出最大和最小数字。这是我到目前为止所尝试过的。
int max(int N, int masyvas[][])
{
int i, j, max[N][N]
for(i=0; i<N; i++)
for(j=i; j<N; j++)
if(masyvas[i][j] > max) max=masyvas[i][j];
return max;
}
我知道这不起作用,但是它至少有用吗?有关如何处理此问题的任何建议?
答案 0 :(得分:1)
你非常接近。两个主要问题是max
类型(它不应该是
另一个数组,但只是一个普通的int
),以及你没有重置的事实
每行前的max
值。
int i, j, max;
for(i=0; i<N; i++) {
max = 0; // reset max before checking a row
for(j=i; j<N; j++) {
if (masyvas[i][j] > max) max = masyvas[i][j];
}
}
添加min
支票应该不难:
int i, j, max, min;
for(i=0; i<N; i++) {
max = min = 0; // reset max & min before checking a row
for(j=i; j<N; j++) {
if (masyvas[i][j] > max) max = masyvas[i][j];
if (masyvas[i][j] < min) min = masyvas[i][j];
}
// print the values here
}
现在,您说要打印这些值。你可以在结束时这样做 外环,如上所述。像原版一样返回最终值 代码没有多大意义,因为只有最后一行max和min仍然存在 在那里。另一种可能是你想要的方法是 make max和min一个数组并返回一个指针:
int *maxValues = calloc(sizeof(int) * N);
int i, j;
for(i=0; i<N; i++)
for(j=i; j<N; j++)
if (masyvas[i][j] > maxValues[i]) maxValues[i] = masyvas[i][j];
return maxValues;
您可能已经注意到要返回最大值和最小值(数组) 你需要另一个级别的指针...
int **
find_max_and_min(int **masyvas)
{
int **values = malloc(sizeof(int *) * 2);
values[0] = calloc(sizeof(int) * N); // to hold min
values[1] = calloc(sizeof(int) * N); // to hold max
for (int i = 0; i < N; i++) {
for (int j = i; j < N; j++) {
if (masyvas[i][j] > values[1][i]) values[1][i] = masyvas[i][j];
if (masyvas[i][j] < values[0][i]) values[0][i] = masyvas[i][j];
}
}
return values;
}
int **result = find_max_and_min(data);
// now result[0] is a 1d array of N size with the minimal values of each
// row i from data, and result[1] is a similar array but holding the max
// of each row.
答案 1 :(得分:1)
我的解决方案:
#include <stdio.h>
struct Output {
int value;
int pos;
};
void max(int N, int masyvas[N][N], struct Output max_by_rows[N]){
int i, j;
for(i=0; i<N; i++){
max_by_rows[i].value = masyvas[i][0];
max_by_rows[i].pos = 0;
for(j=i; j<N; j++)
if(masyvas[i][j] > max_by_rows[i].value)
{
max_by_rows[i].value=masyvas[i][j];
max_by_rows[i].pos = j;
}
}
}
void min(int N, int masyvas[N][N], struct Output min_by_rows[N]){
int i, j;
for(i=0; i<N; i++){
min_by_rows[i].value = masyvas[i][0];
min_by_rows[i].pos = 0;
for(j=i; j<N; j++)
if(masyvas[i][j] < min_by_rows[i].value)
{
min_by_rows[i].value=masyvas[i][j];
min_by_rows[i].pos = j;
}
}
}
int main(){
int N = 4;
int a[4][4] = {
{0, 1, 2, 3} ,
{7, 6, 5, 4} ,
{8, 9, 10, 11},
{15, 14, 13,12}
};
struct Output maxs[4];
struct Output mins[4];
max(N, a, maxs);
min(N, a, mins);
int i;
for(i=0; i <N; i++)
{
printf("row %d \tmax: %d\tpos: %d\tmin: %d\tpos: %d\n", i, maxs[i].value, maxs[i].pos, mins[i].value, mins[i].pos);
}
return 0;
}
输出:
row 0 max: 3 pos: 3 min: 0 pos: 0
row 1 max: 7 pos: 0 min: 4 pos: 3
row 2 max: 11 pos: 3 min: 8 pos: 0
row 3 max: 15 pos: 0 min: 12 pos: 3
答案 2 :(得分:0)
int i, j, max, min;
for(i=0; i<N; i++) {
max = 0;
min = 0;
for(j=i; j<N; j++ ) {
if (masyvas[i][j] > max)
max = masyvas[i][j];
if (masyvas[i][j] < min)
min = masyvas[i][j];
}
}