Tìm kiếm vị trí của phần tử thỏa mãn trong ma trận

Em nhập vào một ma trận gồm 2 hàng 3 cột:
2 4 3
4 3 2

  • Nhập vào một số nguyên: 4
  • Hiển thị tất cả các vị trí của các số trong ma trận giống với số nguyên vừa nhập: 0 1 1 0

Các Bác cho em hỏi là code này em nên chỉnh lại như thế nào để nó hiển thị vị trí ở dạng: (0, 1) (1, 0) ạ.

#include <stdio.h>
void nhap(int a[][100], int m, int n)
{
    int i, j;
    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
        {
            scanf("%d", &a[i][j]);
        }
}
void xuat(int a[][100], int m, int n)
{
    int i, j;
    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
        {
            printf("%d ", a[i][j]);
            if (j == n - 1)
                printf("\n");
        }
}
int kiemtra(int s, int a[][100], int m, int n, int vitri[100])
{
    int i, j, k = 0, count = 0;
    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
        {
            if (s == a[i][j])
            {
                vitri[k] = i;
                vitri[k + 1] = j;
                k += 2;
                count++;
            }
        }
    return count;
}
int main()
{
    int a[100][100], m, n, i, count = 0, vitri[100], s;
    scanf("%d %d", &m, &n);
    nhap(a, m, n);
    scanf("%d", &s);
    xuat(a, m, n);
    count = kiemtra(s, a, m, n, vitri);

    for (i = 0; i < count * 2; i++)
    {
        if (i % 2 == 0)
            printf(" ");
        printf("%d ", vitri[i]);
    }
    printf("\n%d", count);
}

Lần sau chú ý khi đặt tag nha bạn, C với C++ không giống nhau chút nào đâu. :stuck_out_tongue:

Vậy vấn đề của bạn là làm sao từ một mảng kiểu 0 1 1 0 in ra thành (0, 1) (1, 0).
Hay tổng quát hơn là mảng gồm 2n phần tử, làm sao để in ra được dạng:
(a[0], a[1]), (a[2], a[3]), .., (a[i], a[i + 1]), ..., (a[2n - 2], a[2n - 1])

Bạn thấy đơn giản hơn chưa?


Về cách giải bài toán của bạn, sử dùng mảng vitri để lưu cả hàng và cột của phần tử trong ma trận, trong khi đó, ma trận có tối đa 100 x 100 phần tử mà mảng vitri chỉ có thể chứa 100/2 = 50 phần tử. . . :penguin: Và nếu đúng theo như cách của bạn sẽ phải tốn 100 x 100 * 2 ô nhớ để lưu được hết vị trí. :v :V

Nếu chỉ đơn giản là in ra những vị trí đó thì lăp qua ma trận một lần và in ra luôn là được r mà?

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?