Thay thế trong mảng 2 chiều

Ai hướng dẫn em bài này với: Thay thế các phần tử giống nhau trên cùng một hàng của ma trận vuông bằng giá trị trung bình cộng của phần tử đó với phần tử đối xứng với nó qua đường chéo (TBC=(a[i,j]+a[j,i]\2)
Em không biết tạo vòng lặp kiểu gì
 
  • Chủ đề
    mảng hai chiều
  • Bạn cứ cho vòng lặp xét từng hàng, mỗi hàng tìm những phần tử giống nhau. Em viết đại ra thế này, chưa có hay cho lắm nhưng mà khá sát với đề:
    [ah]
    Mã:
    double ** thay_the(int **a, int n) {
        int i, j, k;
        double **b = (double **)malloc(sizeof(double) * n);
        for (i = 0; i < n; i++)
            b[i] = (double *)malloc(sizeof(double) * n);
        for (i = 0; i < n; i++)
            for (j = 0; j < n; j++)
                b[i][j] = a[i][j];
        for (i = 0; i < n; i++)
            for (j = 0; j < n; j++) {
                for (k = j + 1; k < n; k++)
                    if (a[i][j] == a[i][k]) {
                        b[i][j] = (a[i][j] + a[j][i]) / 2.;
                        b[i][k] = (a[i][k] + a[k][i]) / 2.;
                    }
            }
        return b;
    }
    [/ah]
     
    Vậy thì bạn chỉ cần thế này thôi. Mảng b bạn tự khai báo
    Mã:
    for (i = 0; i < n; i++)
            for (j = 0; j < n; j++)
                b[i][j] = a[i][j];
        for (i = 0; i < n; i++)
            for (j = 0; j < n; j++) {
                for (k = j + 1; k < n; k++)
                    if (a[i][j] == a[i][k]) {
                        b[i][j] = (a[i][j] + a[j][i]) / 2.;
                        b[i][k] = (a[i][k] + a[k][i]) / 2.;
                    }
            }
        return b;
     
    Top