Bài tập ma trận xoắn ốc

#include<iostream>

using namespace std;

int a[100][100];
int m, n;

void trai_sang_phai(int x_dau, int x_cuoi, int &y, int &dem)
{
	for(int i=x_dau; i<=x_cuoi; i++)
		{
			a[y][i]=dem;
			dem++;
		}
	y++;
}

void tren_xuong_duoi(int y_dau, int y_cuoi, int &x, int &dem)
{
	for(int j=y_dau; j<=y_cuoi; j++)
		{
			a[j][x]=dem;
			dem++;
		}
	x--;
}

void phai_sang_trai(int x_cuoi, int x_dau, int &y, int &dem)
{
	for(int i=x_cuoi; i>=x_dau; i--)
		{
			a[y][i]=dem;
			dem++;
		}
	y--;
}

void duoi_len_tren(int y_cuoi, int y_dau, int &x, int &dem)
{
	for(int j=y_cuoi; j>=y_dau; j--)
		{
			a[j][x]=dem;
			dem++;
		}
	x++;
}

int main()
{
	cin >> m >> n;
	int x_dau=1, x_cuoi=n, y_dau=1, y_cuoi=m;
	int dem=1;
			
	while(dem != m*n)
		{
				trai_sang_phai(x_dau, x_cuoi, y_dau, dem);
				tren_xuong_duoi(y_dau, y_cuoi, x_cuoi, dem);
				phai_sang_trai(x_cuoi, x_dau, y_cuoi, dem);
				duoi_len_tren(y_cuoi, y_dau, x_dau, dem);
		}	
	
	for(int i=1; i<=m; i++)
		{
		for(int j=1; j<=n; j++)
			{	
				cout << a[i][j] <<" ";
			}
				cout << endl;
		}
}

Các bác xem giúp em code sai ở đâu với ạ:((

e thay dem<=(m*n) thì chạy được nhưng bị lỗi 2 trường hợp m=3 n=4 và m=5 n=6

Bạn đã thử với trường hợp nào mà biết chỉ lỗi với 2 trường hợp trên?
Chắc chỉ chạy đúng khi m và n < 3 thôi. Lớn hơn là sai sạch.

3 Likes

à em giải được rồi cảm ơn bác nhé :smiley: em bị lỗi là mỗi lần lặp nó đều phải chạy hết cả 4 hàm

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