30/09/2018, 16:24

Đếm số lương các giá trị hoàng hậu?

đếm số lương các giá trị hoàng hậu. Một
số được gọi là hoàng hậu khi nó lớn nhất trên hàng và cột và hai đường chép đi qua nó

Phạm Hoàng Tuấn viết 18:40 ngày 30/09/2018

E viết 1 hàm kiểm tra số hoàng hậu, hàm này sẽ duyệt tất cả các phần tử trên hàng, cột, 2 đường chéo, nếu có phần tử nào lớn hơn nó thì trả về false không thì trả về true.
Sau đó e duyệt mảng 2 chiều và đêm số hoàng hậu nhờ vào hàm trên.

Hoan Sò viết 18:39 ngày 30/09/2018

/BÀi 346: đếm số lương các giá trị hoàng hậu. Một
số được gọi là hoàng hậu khi nó lớn nhất trên hàng và cột và hai đường chép đi qua nó
---- Bài 347: đếm số lượng các giá trị yên ngựa trên ma trận. một số được gọi là yên ngựa
khi có giá trị nhỏ nhất trên cột và lớn nhất trên hàng
/

#include<stdio.h>
#include<conio.h>
#define MAX 100

void NhapMang(float a[][MAX], int hang, int cot)
{
	for (int i = 0; i < hang; i++)
	{
		for (int j = 0; j < cot; j++)
		{
			printf("Nhap vap a[%d][%d]:  ", i, j);
			scanf_s("%f", &a[i][j]);
		}
	}
}
void XuatMang(float a[][MAX], int hang, int cot)
{
	for (int i = 0; i < hang; i++)
	{
		for (int j = 0; j < cot; j++)
		{
			printf("%6.2f", a[i][j]);

		}
		printf("\n");
	}
}
void TimHoangHau(int a[][MAX], int hang, int cot){
	float Max = a[0][0],Min=a[0][0];
	bool Check = true;
	for (int i = 0; i < hang; i++){
		for (int j = 1; j < cot; j++){
			if (a[i][j] >Max )
			{
				Check = false;
			}
			else { Check = true; }
			if (a[i][j] < Min){
				Check = false;
			}
			else{ Check = true; }
			if (a[i + 1][j + 1] > Max){
				Check = false;
			}
			else { Check = true; }
			if (i - 1 < 0){ 
				Check = false; 
			}
			else if (a[i - 1][j + 1] > Max)
			{
				Check = true; 
			}

		}
	}
}
/*void TimSoLonNhatTrongHang(float a[][MAX], int k, int cot){
	
float Max = a[k][0];


	for (int j = 1; j < cot ; j++){
		if (a[k][j] > Max){
			Max = a[k][j];
			
		}

	
}
	printf("%.2f", Max);
}*/
int main(){
	float a[MAX][MAX];
	int hang, cot;
	do
	{
		printf("\nNhap so hang:  ");
		scanf_s("%d", &hang);
		if (hang<0 || hang>MAX)
		{
			printf("\nKhong dung xin kiem tra lai!\n");
		}

	} while (hang<0 || hang>MAX);
	do
	{
		printf("\nNhap so cot:  ");
		scanf_s("%d", &cot);
		if (cot<0 || cot>MAX)
		{
			printf("\nKhong dung xin kiem tra lai!\n");
		}

	} while (cot<0 || cot>MAX);
	NhapMang(a, hang, cot);
	XuatMang(a, hang, cot);
	int k;
	printf("Nhap vao hang k (%d--->%d)can tim:  ",0,hang-1);
	scanf_s("%d", &k);
	
	
	
	_getch();
	return 0;

}

Anh xem lại hộ em với chỉ biết làm như thế này thôi!

Phạm Hoàng Tuấn viết 18:40 ngày 30/09/2018

Mạng dạo này k ổn, a thi thoảng mới vào dc, a có viết sẵn 1 hàm kiểm tra hậu, e xem thử xem chạy ổn không, a làm bình thường, không tối ưu gì cả, dựa theo định nghĩa thôi, a k rõ có tính giá trị trùng nhau không, ví dụ có 2 hậu mang giá trị 21, a tính cả 2. e k hiểu chỗ nào cứ hỏi nhé (a viết C++)

bool checkQueen(int a[10][10], int vtdong, int vtcot, int dong, int cot)
{
	int x = a[vtdong][vtcot];

	//ktra dong
	for (int i = 0; i < cot; i++)
	{
		if (a[vtdong][i] > x)
			return false;
	}

	//ktra cot
	for (int j = 0; j < dong; j++)
	{
		if (a[j][vtcot] > x)
			return false;
	}

	//ktra duong cheo thu nhat
	int vtdong1 = vtdong + 1;
	int vtcot1 = vtcot + 1;
	while (vtcot1 + 1 < cot && vtdong1 < vtdong)
	{
		if (a[vtcot1][vtdong1] >x)
			return false;
		vtcot1++;
		vtdong1++;
	}
	vtdong1 = vtdong - 1;
	vtcot1 = vtcot - 1;
	while (vtcot1 - 1 >= 0 && vtdong1 >= 0)
	{
		if (a[vtcot1][vtdong1] >x)
			return false;
		vtcot1--;
		vtdong1--;
	}

	// duong cheo thu 2
	vtdong1 = vtdong + 1;
	vtcot1 = vtcot - 1;
	while (vtcot1 - 1 >= 0 && vtdong1 < dong)
	{
		if (a[vtcot1][vtdong1] >x)
			return false;
		vtdong1++;
		vtcot1--;
	}
	vtdong1 = vtdong - 1;
	vtcot1 = vtcot + 1;

	while (vtdong1 - 1 >= 0 && vtcot1 < cot)
	{
		if (a[vtcot1][vtdong1] >x)
			return false;
		vtdong1--;
		vtcot1++;
	}
	return true;
}


int _tmain(int argc, _TCHAR* argv[])
{
	int a[10][10];
	a[0][0] = 1; a[0][1] = 2; a[0][2] = 24; a[0][3] = 3;
	a[1][0] = 9; a[1][1] = 7; a[1][2] = 6; a[1][3] = 8;
	a[2][0] = 3; a[2][1] = 5; a[2][2] = 20; a[2][3] = 14;

	int dong = 3;
	int cot = 4;
	int count = 0;
	for (int i = 0; i < dong; i++)
	{
		for (int j =0 ; j < cot; j++)
		{
			int x = a[i][j];
			if (checkQueen(a, i, j, dong, cot))
			{
				count++;
			}
		}
	}

	printf_s("So luong hau : %d", count);
	scanf_s("%d");
	return 0;
}

Bài liên quan
0