Bài toán: Tìm số nguyên tố lớn/nhỏ nhất trong ma trận
Input: mảng a có m dòng, n cột
Xử lý: duyệt mảng, tìm vị trí số nguyên tố lớn/nhỏ đầu tiên trong mảng
Giữ lại vị trí m,n vừa mới tìm được , rồi thoát khỏi vòng lặp
Nếu duyệt hết mảng mà không tìm được số nguyên tố lớn/nhỏ thì trả về giá trị -1
Duyệt mảng từ dòng +1, cột giữ nguyên vị trí tìm được ở trên
Nều là giá trị số nguyên tố lớn/nhỏ và giá trị số nguyên tố lớn/nhỏ hơngiá trị số nguyên tố lớn/nhỏ đầu tiên thì cập nhật lại giá trị vừa tìm được, duyệt đến hết mảng sẽ tìm được giá trị số nguyên tố lớn/nhỏ nhất
Output: ma trận không có số nguyên tố -1, giá trị nguyên tố lớn/nhỏ nhất
Hàm tìm SNT lớn nhất
int SNTMax(int a[][MAX], int m, int n) { int i,j,d,c,vtc,vtd,e,max; for( i=0;i<m;i++) { for( j=0;j<n;j++) { if(SNT(a[i][j])==1) { d=i; c=j; e=a[i][j]; break; } } } if(i==m && j==n) return -1; vtd=d; vtc=c; max=e; for( i=vtd+1;i<m;i++) { for( j=0;j<n;j++) { if(SNT(a[i][j])==1 && a[i][j]>max) { max=a[i][j]; } } } return max; }
Hàm tìm SNT nhỏ nhất
int SNTMin(int a[][MAX], int m, int n) { int i,j,d,c,vtc,vtd,e,max; for( i=0;i<m;i++) { for( j=0;j<n;j++) { if(SNT(a[i][j])==1) { d=i; c=j; e=a[i][j]; break; } } } if(i==m && j==n) return -1; vtd=d; vtc=c; min=e; for( i=vtd+1;i<m;i++) { for( j=0;j<n;j++) { if(SNT(a[i][j])==1 && a[i][j]<min) { min=a[i][j]; } } } return min; }
Chương trình tìm SNT lớn nhất
#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); int SNT(int n); int SNTMax(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); if(SNTMax(a,m,n)==-1) printf("\nMang khong co so nguyen to "); else printf("\nSo nguyen to lon nhat la: %d",SNTMax(a,m,n)); 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"); } } int SNT(int n) { int dem=0; for(int i=1;i<=n;i++) if(n%i==0) dem++; if(dem==2) return 1; else return 0; } int SNTMax(int a[][MAX], int m, int n) { int i,j,d,c,vtc,vtd,e,max; for( i=0;i<m;i++) { for( j=0;j<n;j++) { if(SNT(a[i][j])==1) { d=i; c=j; e=a[i][j]; break; } } } if(i==m && j==n) return -1; vtd=d; vtc=c; max=e; for( i=vtd+1;i<m;i++) { for( j=0;j<n;j++) { if(SNT(a[i][j])==1 && a[i][j]>max) { max=a[i][j]; } } } return max; }
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!
Xem thêm: Tìm số chẵn/lẻ lớn nhất trong ma trận
cho e hỏi c,d,e là gì trong tìm snt lớn nhất ạ
Bạn hỏi chỗ nào trong bài viết?