01/10/2018, 14:00

Sắp xếp ma trận sao cho phần tử lớn nhất của mỗi hàng nằm trên đường chéo chính

Em muốn in ma trận ra như đề nhưng khi chạy thử ma trận này thì ra như thế này:

Mong mọi người sửa code lại giúp em ạ.

#include <iostream>
#include <limits.h>
using namespace std;

void nhapDongcot(int &dong, int &cot){
	do{
	cout<<"Nhap so dong: ";
	cin>>dong;
	if(dong<0) cout<<"
So dong khong hop le";
	}
	while (dong<0);
	do{
	cout<<"Nhap so cot: ";
	cin>>cot;
	if(dong<0) cout<<"
So cot khong hop le";
	}
	while (cot<0);
}
void nhapMang(int a[][10], int dong, int cot){

	for(int i=0;i<dong;i++){
		for(int j=0;j<cot;j++){
			cout<<"a["<<i<<"]["<<j<<"]= ";
			cin>>a[i][j];
		}
	}
}
void xuatMang(int a[][10], int dong, int cot){
	for(int i=0;i<dong;i++){
		for(int j=0;j<cot;j++){
			cout<<a[i][j]<<"	";
		}
        cout<<endl;
	}
}
void hoanVi(int &x, int &y)
{
    int temp=x;
    x=y;
    y=temp;
}
void sapXep(int a[][10], int dong, int cot)
{
    int maxd=INT_MIN;
    for(int i=0;i<dong;i++){
        for(int j=0;j<cot;j++){
            if(a[i][j]>maxd) {
                maxd=a[i][j];
                hoanVi(a[i][j], a[i][i]);
            }
        }
        maxd=INT_MIN;
    }
    cout<<"
Ma tran sau khi sap xep la: 
";
    xuatMang(a, dong, cot);
}
int main()
{
	int a[10][10], dong, cot;
	nhapDongcot(dong, cot);
	nhapMang(a, dong, cot);
	xuatMang(a, dong, cot);
	sapXep(a, dong, cot);
    return 0;
}

rogp10 viết 16:08 ngày 01/10/2018

Đây là lí do chính vì sao người ta khuyên tìm max xong xuôi rồi muốn làm gì thì làm.

Mèo Đi Dép viết 16:12 ngày 01/10/2018

hàm sắp xếp bạn sửa lại 1 chút là ngon ngay

  1. thêm một biến đánh dấu chỉ số max
  2. đưa hàm hoán vị ra khỏi vòng loop thứ 2

void sapXep(int a[][10], int dong, int cot)
{
int maxd=INT_MIN;
// them chi so index max
int index_max = -1;

for(int i=0;i<dong;i++){
    for(int j=0;j<cot;j++){
        if(a[i][j]>maxd) {
            maxd=a[i][j];
            index_max = j;
        }
    } 
    
    hoanVi(a[i][index_max], a[i][i]); 
    maxd=INT_MIN;
}
cout<<"\nMa tran sau khi sap xep la: \n";
xuatMang(a, dong, cot);

}

Đông Hà viết 16:04 ngày 01/10/2018

em hiểu rồi, cám ơn mn

Bài liên quan
0