在维数组上找到min行和min列中的min元素

时间:2014-05-26 18:23:05

标签: c

#include<stdlib.h>
#include<stdio.h>
#include<ctype.h>
int mas[200][200],i = 0,j = 0;
char c[20];
int x,y,max;

//从txt文件中读取数组的函数.//

void read()
{
    FILE *fp = fopen("masyvas.txt","r");
    while(!feof (fp))
    {
        fscanf (fp, "%d", &mas[i][j]);
        i++;
        printf("%d\n",i);
        fscanf(fp,"%c",&c);
        printf("%c\n",c);
        if(*c == '\n')
        {
            j++;
            i = 0;
        }
    }
    i = 0;
    j = 0;
    fclose(fp);
}

//从数组中找到min和max的函数需要改进,以找到相同元素的行中的最小值和最大值.//

void find()
{
    int a = 0,max = 0,min = 200,b = 0,sk = 45,g = 0;
    while(sk != 0)
    {
        if(mas[a][b] <= min)
        {
            min = mas[a][b];
        }
        if(mas[a][b] > max)
        {
            max = mas[a][b]
        }
        a++;
        if(a == 9)
        {
        b++;
        a = 0;
        {
        sk--;
    }

}

文字档案:

5 4 6 4 6 5 4 6 5
7 3 4 5 4 3 5 2 2
6 2 3 6 4 6 4 5 7
3 1 4 5 3 4 6 3 4
2 3 5 2 3 5 2 6 7

伙计我没有选择我几乎尝试了所有我无法想到的东西看看void find()告诉我必须要改变什么以及我想如何在他的专栏中找到最小行和最大值的元素

现在可以找到min和max我做了== 9因为它表示数组中列的位置然后它到达行的末尾(9)行中的位置返回0并且添加了b行数。我需要找到哪些数组元素在行中具有最小值,在列中具有最大值。我希望我能解释清楚。

2 个答案:

答案 0 :(得分:1)

这是一个天真的解决方案,但它可以满足您的需求。

#define _CRT_SECURE_NO_WARNINGS 1 

#include<stdlib.h>
#include<stdio.h>
#include<ctype.h>

int matrix[200][200];

void readMatrix(int *rows, int *cols)
{
    int rowIdx = 0;
    int colIdx = 0;
    char c;
    FILE *file = fopen("input.txt", "r");

    while (!feof(file))
    {
        fscanf(file, "%d", &matrix[rowIdx][colIdx]);
        colIdx++;
        fscanf(file, "%c", &c);

        if (c == '\r' || c == '\n')
        {
            ++rowIdx;
            *cols = colIdx;
            colIdx = 0;
        }
    }

    *rows = rowIdx;
    fclose(file);
}

int isMinOnRow(int rowIdx, int colIdx, int cols)
{
    int value = matrix[rowIdx][colIdx];
    int cI;

    for (cI = 0; cI < cols; ++cI)
    {
        if (matrix[rowIdx][cI] < value)
            return 0;
    }

    return 1;
}

int isMaxOnCol(int rowIdx, int colIdx, int rows)
{
    int value = matrix[rowIdx][colIdx];
    int rI;

    for (rI = 0; rI < rows; ++rI)
    {
        if (matrix[rI][colIdx] > value)
            return 0;
    }

    return 1;
}

void findMinMax(int rows, int cols, int *rowIdx, int *colIdx)
{
    int bFound = 0;
    int rI, cI;

    for (rI = 0; rI < rows; ++rI)
    {
        for (cI = 0; cI < cols; ++cI)
        {
            if (isMinOnRow(rI, cI, cols) && isMaxOnCol(rI, cI, rows))
            {
                *rowIdx = rI;
                *colIdx = cI;

                bFound = 1;
                break;
            }
        }

        if (bFound)
            break;
    }
}

int main()
{
    int cols, rows;
    int rowIdx, colIdx;

    readMatrix(&rows, &cols);
    findMinMax(rows, cols, &rowIdx, &colIdx);

    printf("max min at [%d, %d] = %d\n", rowIdx, colIdx, matrix[rowIdx][colIdx]);

    return 0;
}

基本上它的作用是迭代矩阵并检查每个元素是否符合要求的条件。

答案 1 :(得分:0)

a++;
if(a == 9)
   b++;
a = 0;

这应该是:

a++;
if(a == 9) {
   b++;
   a = 0;
}

它也应该是(a == 200),因为它是数组的大小。

编辑:等等,我现在看到9和45的值指的是5行的9个值。