Advertisement
Guest User

Bai 3 - BG8 - ver2

a guest
Aug 22nd, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.91 KB | None | 0 0
  1. // Nhận xét
  2. 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 ý
  3. // Code
  4. #include<stdio.h>
  5. #include<stdlib.h>
  6.  
  7. int** NhapMang(int **a, int *pnCanh)
  8. {
  9.     int i, j;
  10.  
  11.     printf("Nhap vao canh ma tran vuong: ");
  12.     scanf("%d", pnCanh);
  13.  
  14.     a = (int**)malloc(*pnCanh * sizeof(int*));
  15.  
  16.     for (i = 0; i < *pnCanh; i++)
  17.         a[i] = (int*)malloc(*pnCanh * sizeof(int));
  18.  
  19.     for (i = 0; i < *pnCanh; i++)
  20.     {
  21.         for (j = 0; j < *pnCanh; j++)
  22.         {
  23.             printf("a[%d][%d] = ", i, j);
  24.             scanf("%d", &a[i][j]);
  25.         }
  26.     }
  27.  
  28.     return a;
  29. }
  30.  
  31. void XuatMang(int **a, int nCanh)
  32. {
  33.     int i, j;
  34.  
  35.     for (i = 0; i < nCanh; i++)
  36.     {
  37.         for (j = 0; j < nCanh; j++)
  38.             printf("%5d", a[i][j]);
  39.  
  40.         printf("\n");
  41.     }
  42. }
  43.  
  44. int TinhTongMangCon(int **a, int i, int j, int nDong, int nCot)
  45. {
  46.     int m, n;
  47.     int Tong = 0;
  48.  
  49.     for (m = i; m < i + nDong; m++)
  50.         for (n = j; n < j + nCot; n++)
  51.             Tong += a[m][n];
  52.  
  53.     return Tong;
  54. }
  55.  
  56. int MaxTongMang2Chieu(int **a, int nCanh, int nDong, int nCot)
  57. {
  58.     int i, j;
  59.     int Max = INT_MIN;
  60.  
  61.     for (i = 0; i <= nCanh - nDong; i++)
  62.     {
  63.         for (j = 0; j <= nCanh - nCot; j++)
  64.         {
  65.             int Tong = TinhTongMangCon(a, i, j, nDong, nCot);
  66.  
  67.             if (Max < Tong)
  68.                 Max = Tong;
  69.         }
  70.     }
  71.  
  72.     return Max;
  73. }
  74.  
  75. int main()
  76. {
  77.     // khai bao
  78.     int **a = NULL;
  79.     int nCanh = 0;
  80.     int nDong = 0;
  81.     int nCot = 0;
  82.     int Max = 0;
  83.     int i;
  84.    
  85.  
  86.     // nhap mang
  87.     a = NhapMang(a, &nCanh);
  88.  
  89.     // xuat mang
  90.     XuatMang(a, nCanh);
  91.  
  92.     // nhap vao nDong, nCot cua mang con
  93.     printf("Nhap vao so dong mang con: ");
  94.     scanf("%d", &nDong);
  95.  
  96.     printf("Nhap vao so cot mang con: ");
  97.     scanf("%d", &nCot);
  98.  
  99.     // tim mang 2 chieu co tong lon nhat va in ra ket qua
  100.     Max = MaxTongMang2Chieu(a, nCanh, nDong, nCot);
  101.  
  102.     printf("----->Tong mang con lon nhat = %d \n", Max);
  103.  
  104.     // giai phong bo nho
  105.     for (i = 0; i < nCanh; i++)
  106.         free(a[i]);
  107.  
  108.     free(a);
  109.     a = NULL;
  110.  
  111.     return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement