Bài toán: Tìm dòng có tổng lớn/nhỏ nhất trong ma trận
Input: ma trận a có m dòng, n cột
Xử lý:
Trước tiên viết hàm tính tổng các dòng
Duyệt mảng, tính tổng
Dòng 0:s=a[0][1]+a[0][2]+….a[0][n-1]
Dòng 1: s=a[1][1]+a[1][2]+…+a[1][n-1]
Dòng m: s=a[m][0]+a[m][1]+…+a[m][n-1]
Hàm tính tổng dòng
double tong(int a[][MAX], int i, int n) { double s=0; for(int j=0;j<n;j++) s=s+a[i][j]; return s; }
Hàm trả về tổng
Sau đó viết hàm tính tổng dòng lớn nhất
Gán max= tổng dòng 0
Duyệt mảng, gán tong= tong dong m
Rồi so sánh max với tổng. Nếu tổng lớn/nhỏ hơn max thì cập nhật lại giá trị max và vị trí dòng i, để khi duyệt hết mảng sẽ tìm được dòng lớn nhất
Hàm tìm dòng có tổng lớn nhất
int tonglonnhat(int a[][MAX], int m, int n) { int i,d; double max=tong(a,0,n); for( i=1;i<m;i++) { double t=tong(a,i,n); if(max<t) { max=t; d=i; } } return d; }
Hàm tìm dòng có tổng nhỏ nhất
int tongnhonhat(int a[][MAX], int m, int n) { int i,d; double min=tong(a,0,n); for( i=1;i<m;i++) { double t=tong(a,i,n); if(min>t) { min=t; d=i; } } return d; }
Output: dòng lớn/nhỏ nhất
Chương trình
#include<stdio.h> #include<conio.h> #include<math.h> #define MAX 100 void nhapmang(int a[][MAX], int &m, int &n); void xuatmang(int a[][MAX], int m, int n); double tong(int a[][MAX], int i, int n); int tonglonnhat(int a[][MAX], int m, int n); void main() { int a[MAX][MAX], m,n; nhapmang(a,m,n); printf("\nnoi dung cua ma tran\n"); xuatmang(a,m,n); int kq=tonglonnhat(a,m,n); printf("\nDong lon nhat trong ma tran la: %d",kq); printf("\nChuc Ban hoc tot"); getch(); } void nhapmang(int a[][MAX], int &m, int &n) { int i,j; do { printf("nhap vao so dong cua ma tran: "); scanf("%d",&m); }while(m<=0); do { printf("nhap vao so cot cua ma tran: "); scanf("%d",&n); }while(n<=0); for( i=0;i<m;i++) { for( j=0;j<n;j++) { printf("\nso phan tu a[%d][%d]: ",i,j); scanf("%d",&a[i][j]); } } } void xuatmang(int a[][MAX], int m, int n) { for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { printf("%5d",a[i][j]); } printf("\n"); } } double tong(int a[][MAX], int i, int n) { double s=0; for(int j=0;j<n;j++) s=s+a[i][j]; return s; } int tonglonnhat(int a[][MAX], int m, int n) { int i,d; double max=tong(a,0,n); for( i=0;i<m;i++) { double t=tong(a,i,n); if(max<t) { max=t; d=i; } } return d; }
Mình chia sẻ code này để các bạn tham khảo các vấn đề tương tự. Tuy nhiên các bạn nên tự làm lại, đừng nên copy. Nếu gặp vấn đề gì khó khăn, hoặc thắc mắc gì, các bạn có thể đặt câu hỏi ở cuối bài. Mình sẽ giải đáp.
Chúc các bạn thành công!