Tạo ma trận B từ ma trận A

Đề bài cho 1 ma trận A, yêu cầu tạo ra ma trận B từ ma trận A, điều kiện là các phần tử trong ma trận B tại vị trí i và j phải bằng tổng các chữ số của tương ứng của các phần tử trong ma trận A tại vị trí i và j. Sau đây là code của mình.

int tongsochuso(int n)
{
	int s=0;
	while(n!=0)
	{
		s=s+n%10;
		n=n/10;
	}
	return s;
}

void mangb(int a[][100],int b[][100],int n,int m,int &p,int &q)
{
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			b[p][q]=tongsochuso(a[i][j]);
			p++;
			q++;
		}
	}
}

int main()
{
	int b[100][100]={0},a[100][100],n,m,p=0,q=0;
	nhapmang(a,n,m);
	xuatmang(a,n,m);
	cout<<"\nMang b \n\n";
	mangb(a,b,n,m,p,q);
	xuatmang(b,p,q);
	return 0;
}

Chạy thì đúng nhưng mà 1 nó lại xuất ra cái ma trận lớn gấp n^2 lần cái ma trận đầu với các phần tử cần tìm chạy theo đường chéo chính và các phần tử xung quanh đều bằng 0, xin mọi người cách khắc phục vấn đề này ạ

1 Like

Hàm mangb của bạn bị sai.

yêu cầu đầu bài là tạo mảng A với A(i,j) = f(B(i,j)). thi chảng có lý do gì phải tạo 2 biến p và q dư thừa.
Kết thúc hàm mangb p=m và q=n.
Nếu dùng p và q thì p map với i và q map với j. nghĩa là p++ khi i++ và q++ khi j++.
Nhưng ở đây khi j++ bạn tăng cả p và q.

4 Likes

Chuyển p++ ra vòng lặp 1.

Tạo ma trận B có số cột và dòng bằng ma trận A. Thì dùng ij cho B luôn, p, q làm gì nữa?

4 Likes

à thì ra là vậy mình cứ quên cái này ko phải gộp mảng hoặc tách mảng :sweat_smile: cảm ơn bạn.

1 Like

mình nhầm cứ tưởng gộp hoặc tách mảng :sweat_smile:

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