Tìm điểm lồi có giá trị nhỏ nhất của mảng

Em có một bài tập như sau

Cho ma trận A kích thước MxN (0<M,N<100) chứa các số thực nhỏ hơn 100000. Một điểm Xi,j được gọi là điểm lồi nếu như nó lớn hơn cả 4 điểm trên, dưới, trái, phải của nó.
Yêu cầu: Tìm X¬min là điểm lồi có giá trị nhỏ nhất của mảng.
Dữ liệu vào: Được nhập từ bàn phím có cấu trúc như sau:

  • Dòng đầu tiên là hai số nguyên dương M, N biểu diễn kích thước của ma trận A (M dòng, N cột).
  • M dòng tiếp theo, mỗi dòng là N số thực (mỗi số cách nhau ít nhất một khoảng trắng) lần lượt là N phần tử của từng dòng tương ứng của ma trận.
    Dữ liệu ra: Xuất ra màn hình một dòng duy nhất gồm 2 số nguyên I, J lần lượt là chỉ số dòng và cột của Xmin đầu tiên từ trên xuống và từ trái qua phải. Nếu không có điểm lồi nào thì xuất ra là -1.
    Ví dụ:
    Dữ liệu vào
    3 4
    3 9 5 6
    4 6 8 7
    8 11 7 10

Dữ liệu ra
1 2

Bài này em chỉ mới tìm được điểm lồi, bài còn yêu cầu xuất ra vị trí của điểm lồi. Đây là code em đã làm.

#include <stdio.h>
#include <conio.h>
#include <limits.h>
#define MAX 100
#define input "bai1.txt"
#define output "bai1.out"

void NhapMang(float a[][MAX], int &dong, int &cot);
void XuatMang(float a[][MAX], int dong, int cot);
void DemSoLuongCucTri(float a[][MAX], int dong, int cot);
void SapXepGiamDan(float a[][MAX], int dong, int cot);
void HoanVi(float &a, float &b);
void main()
{
    float a[MAX][MAX];
    int dong, cot;
    NhapMang(a, dong, cot);
    XuatMang(a, dong, cot);
    DemSoLuongCucTri(a, dong, cot);
}

void NhapMang(float a[][MAX], int &dong, int &cot)
{
    scanf("%d%d",&dong, & cot);
    for(int i = 0; i < dong; i++)
    {
        for(int j = 0; j < cot; j++)
        {
            scanf("%f", &a[i][j]);
        }
    }
}

void XuatMang(float a[][MAX], int dong, int cot)
{
    for(int i = 0; i < dong; i++)
    {
        for(int j = 0; j < cot; j++)
        {
            printf("%6.2f", a[i][j]);
        }
        printf("\n");
    }
}

void DemSoLuongCucTri(float a[][MAX], int dong, int cot)
{
    int dem = 0;
    int u,v;

    for(int i = 0; i < dong; i++)
    {
        for(int j = 0; j < cot; j++)
        {
            int Max = INT_MIN;
            int Min = INT_MAX;

            if(i - 1 >= 0)
            {
                Max = a[i - 1][j] > Max ? a[i - 1][j] : Max ;
            }

            if(i + 1 != dong)
            {
                Max  = a[i + 1][j] > Max  ? a[i + 1][j] : Max ;
            }

            if(j - 1 >= 0)
            {
                Max  = a[i][j - 1] >Max  ? a[i][j - 1] : Max ;
            }

            if(j + 1 != cot)
            {
                Max  = a[i][j + 1] > Max  ? a[i][j + 1] : Max ;
            }
            
            if( a[i][j] > Max)
            {
                printf("%0.2f ",a[i][j]);
            }
        }
    }
}

Không hiểu cả tiêu đề, đề bài lẫn code :astonished:

3 Likes

Cho ma trận A kích thước MxN (0<M,N<100) chứa các số thực nhỏ hơn 100000. Một điểm Xi,j được gọi là điểm lồi nếu như nó lớn hơn cả 4 điểm trên, dưới, trái, phải của nó.
Yêu cầu: Tìm X¬min là điểm lồi có giá trị nhỏ nhất của mảng.
Dữ liệu vào: Được nhập từ bàn phím có cấu trúc như sau:

  • Dòng đầu tiên là hai số nguyên dương M, N biểu diễn kích thước của ma trận A (M dòng, N cột).
  • M dòng tiếp theo, mỗi dòng là N số thực (mỗi số cách nhau ít nhất một khoảng trắng) lần lượt là N phần tử của từng dòng tương ứng của ma trận.
    Dữ liệu ra: Xuất ra màn hình một dòng duy nhất gồm 2 số nguyên I, J lần lượt là chỉ số dòng và cột của Xmin đầu tiên từ trên xuống và từ trái qua phải. Nếu không có điểm lồi nào thì xuất ra là -1.
    Ví dụ:
    Dữ liệu vào
    3 4
    3 9 5 6
    4 6 8 7
    8 11 7 10

Dữ liệu ra
1 2

đây là đề

làm thêm một mảnh 2 chiều flag đánh dấu thôi :smiley:

có thể giúp e rõ hơn 1 tí nửa được ko a

Góp ý cho @webhnt nhé, không liên quan đến câu hỏi, nhưng liên quan đến việc trình bày

Đừng đặt câu hỏi như mình đang “chat”, mà hãy đặt câu hỏi như mình đang viết về một “vấn đề” mà mình đang mắc phải.

Tiêu đề như thế này không thể hiện được điều gì cả

Anh chị giúp e tiếp bài này với

Nội dung như thế này cũng không nốt

Bài này em chỉ mới tìm được điểm lồi, bài còn yêu cầu xuất ra vị trí của điểm lồi
ví dụ
Dữ liệu vào
3 4
3 9 5 6
4 6 8 7
8 11 7 10

Dữ liệu ra
1 2

Thế nên ta phải nghiên cứu cách đặt câu hỏi sao cho người đọc hiểu được vấn đề ngay, và có khả năng giúp mình.

Và quan trọng nữa là cách post code bằng MarkDown mà diễn đàn hỗ trợ.


Ngoài các vấn đề trình bày, em cần phải chú trọng vào nội dung câu hỏi. Bài này em có code rồi, tức là em đã tìm hiểu và có cách giải quyết vấn đề. Tuy nhiên có thể vì code em chạy sai, hoặc cách giải quyết em chưa đúng. Dẫn đến em không giải được.

Giải pháp cho vấn đề này là em hãy đưa ra cách em giải quyết vấn đề và cho biết điều gì làm em không thực hiện được.

Em nghiên cứu cách trình bày để học cho tốt nhé. :+1:

2 Likes

DẠ CẢM ƠN ANH LẦN SAU E SẼ RÚT KINH NGHIỆM VÀ HỌC TẬP

điểm lồi là gì vậy???

điểm lồi là cái gì?
:anguished:

mình chưa xem qua code của bạn, cách làm của mình là viết 1 hàm kiểm tra ô đó có lồi không, nếu giá trị của ô đó là lồi thì kiểm tra giá trị của nó với max, nếu lớn hơn (phải lớn hơn chứ không phải lớn hơn hoặc bằng nhé, vì đề yêu cầu xuất 1 giá trị trái trên) thì lưu vị trị nó lại vào 2 biến iX và iY :smiley: cuối cùng xuất ra thôi

lúc trước có làm bài tìm phần tử trũng. (nhớ không nhầm là nhập vào mảng từ file text, tính tổng 8 ô xung quanh của mỗi ô và xuất tổng ngay tại ô đó) =)) .Hôm nay gặp cả phần tử LỒI ???

Hoc thầy tú hả bro :))

Học thầy tú nè anh và cũng đang làm bài như này :)) y hệt

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?