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]);
}
}
}
}