Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Nhận xét
- Bài 3. Đề là không quy định mảng con đó là ma trận vuông cấp 2 nha em. Có thể là mảng 2 chiều tùy ý
- // Code
- #include<stdio.h>
- #include<stdlib.h>
- int** NhapMang(int **a, int *pnCanh)
- {
- int i, j;
- printf("Nhap vao canh ma tran vuong: ");
- scanf("%d", pnCanh);
- a = (int**)malloc(*pnCanh * sizeof(int*));
- for (i = 0; i < *pnCanh; i++)
- a[i] = (int*)malloc(*pnCanh * sizeof(int));
- for (i = 0; i < *pnCanh; i++)
- {
- for (j = 0; j < *pnCanh; j++)
- {
- printf("a[%d][%d] = ", i, j);
- scanf("%d", &a[i][j]);
- }
- }
- return a;
- }
- void XuatMang(int **a, int nCanh)
- {
- int i, j;
- for (i = 0; i < nCanh; i++)
- {
- for (j = 0; j < nCanh; j++)
- printf("%5d", a[i][j]);
- printf("\n");
- }
- }
- int TinhTongMangCon(int **a, int i, int j, int nDong, int nCot)
- {
- int m, n;
- int Tong = 0;
- for (m = i; m < i + nDong; m++)
- for (n = j; n < j + nCot; n++)
- Tong += a[m][n];
- return Tong;
- }
- int MaxTongMang2Chieu(int **a, int nCanh, int nDong, int nCot)
- {
- int i, j;
- int Max = INT_MIN;
- for (i = 0; i <= nCanh - nDong; i++)
- {
- for (j = 0; j <= nCanh - nCot; j++)
- {
- int Tong = TinhTongMangCon(a, i, j, nDong, nCot);
- if (Max < Tong)
- Max = Tong;
- }
- }
- return Max;
- }
- int main()
- {
- // khai bao
- int **a = NULL;
- int nCanh = 0;
- int nDong = 0;
- int nCot = 0;
- int Max = 0;
- int i;
- // nhap mang
- a = NhapMang(a, &nCanh);
- // xuat mang
- XuatMang(a, nCanh);
- // nhap vao nDong, nCot cua mang con
- printf("Nhap vao so dong mang con: ");
- scanf("%d", &nDong);
- printf("Nhap vao so cot mang con: ");
- scanf("%d", &nCot);
- // tim mang 2 chieu co tong lon nhat va in ra ket qua
- Max = MaxTongMang2Chieu(a, nCanh, nDong, nCot);
- printf("----->Tong mang con lon nhat = %d \n", Max);
- // giai phong bo nho
- for (i = 0; i < nCanh; i++)
- free(a[i]);
- free(a);
- a = NULL;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement