Em mới làm bài zích zắc chéo :
1---2-----6----7---15
3---5-----8---14---16
4---9----13---17-- 24
10--12---18---23---25
11--19---22---26---29
20--21---27---28---30
KO chỉ là ma trận vuông mà còn là ma trận chữ nhật cạnh trên lớn hơn và cạnh đứng lớn hơn.
Em đã làm được nhưng thấy chưa hài lòng lắm, bác nào rảnh làm lại cho gọn dùm em với .....
Cac bac thong cam hoi nay nho ban hoi qua nen ko ghi chu thich.
Giúp em nhá . Thanks nhiều nhiều.
Code:
// www.ithoasen.hnsv.com
#include<stdio.h>
#include<conio.h>
#define M 100
int check(int r,int c,int k);
void main()
{
int a[M][M],i,j,n,m,dem=1,k,r,c;
printf("Nhap vao chieu ngang cua ma tran:\n ");
scanf("%d",&r);
printf("Nhap vao chieu cai cua ma tran:\n ");
scanf("%d",&c);
n=r>=c?r:c;
m=0;
while(m<n)
{
i=0;
j=m;
while(i<=m&&j>=0)
{
if(m%2==0)
{
if((j<c)&&(i<r))
a[j--][i++]=dem++;
else
{
j--;
i++;
}
}
else
{
if((i<c)&&(j<r))
a[i++][j--]=dem++;
else
{
j--;
i++;
}
}
}
m++;
}
k=1;
while(k<=n)
{
i=k;
j=n-1;
while(i<n)
{
if(check(r,c,k)==0)
{
if((j<r)&&(i<c))
a[i++][j--]=dem++;
else
{
i++;
j--;
}
}
else
{
if((i<r)&&(j<c))
a[j--][i++]=dem++;
else
{
i++;
j--;
}
}
}
k++;
}
for(i=0;i<c;i++)
{
for(j=0;j<r;j++)
{
printf("%5d",a[i][j]);
}
printf("\n");
}
printf("\nLe Duc Huy");
getch();
}
int check(int r,int c,int k)
{
if(r>c&&k%2==0) return 0;
if(c>r&&k%2==1) return 0;
return 1;
}