假期无聊,写了一下基础题目,斜杠矩阵。
这个具体的思路,我也不知道如何解释,双向与单向只是多了一个变量控制,思路简单来说就是找到他不变的量与相等量。
具体看以下代码:
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <windows.h>
using namespace std;
const int maxn=1e3+5;
int num[maxn][maxn];
int main()
{
int m,n;
printf("请输入矩阵边长:");
while(~scanf("%d",&n))
{
while(2)
{
int tot=0;
int x,y,ans=1;
system("cls");
memset(num,0,sizeof(num));
system("color F0");
tot=0;
printf("\n*************************\n");
printf("\n* 1-左上角双向循环 *\n");
printf("\n* 2-右上角双向循环 *\n");
printf("\n* 3-左下角单向循环 *\n");
printf("\n* 4-右下角单向循环 *\n");
printf("\n* 5-重新定义边长 *\n");
printf("\n*********************\n");
printf("请输入您的选择:");
int cho;
scanf("%d",&cho);
if(cho==1)
{
y=1;
while(y<=n)
{
if(ans%2)//ans控制方向
for(int i=1,k=y;i<=y;i++,k--)//往左下方走 每次开始都是从x=1开始。
num[i][k]=++tot;//一个终止条件即可,因为此为n阶。
else
for(int i=y,k=1;i>=1;i--,k++)//往右上方走 每次开始都是从y=1开始。
num[i][k]=++tot;//之后的四个图案都一样,不在解释。
y++;
ans++;
}
y=2;
while(y<=n)
{
if(ans%2)
for(int i=y,k=n;i<=n;i++,k--)
num[i][k]=++tot;
else
for(int i=n,k=y;k<=n;k++,i--)
num[i][k]=++tot;
y++;
ans++;
}
}
else if(cho==2)
{
x=1;
ans=1;
while(x<=n)
{
if(ans%2)
for(int i=x,k=n;i>=1;i--,k--)
num[i][k]=++tot;
else
for(int i=1,k=n-x+1;i<=x;i++,k++)
num[i][k]=++tot;
x++;ans++;
}
x=2;
while(x<=n)
{
if(ans%2)
for(int i=n,k=n+1-x;k>=1;k--,i--)
num[i][k]=++tot;
else
for(int k=1,i=x;i<=n;i++,k++)
num[i][k]=++tot;
x++;ans++;
}
}
else if(cho==3)
{
y=1;
while(y<=n)
{
for(int i=n,k=y;k>=1;i--,k--)
num[i][k]=++tot;
y++;
}
y=n-1;
while(y>=1)
{
for(int i=y,k=n;i>=1;i--,k--)
num[i][k]=++tot;
y--;
}
}
else if(cho==4)
{
y=n;
while(y>=1)
{
for(int i=n,k=y;k<=n;k++,i--)
num[i][k]=++tot;
y--;
}
y=n-1;
while(y>=1)
{
for(int i=y,k=1;i>=1;i--,k++)
num[i][k]=++tot;
y--;
}
}
else
{
printf("重新输入边长: ");
break;
}
system("cls");
system("color Fa");
for(int i=1;i<=n;i++)
{
for(int k=1;k<=n;k++)
printf("%5d",num[i][k]);
printf("\n");
}
system("pause");
}
}
return 0;
}
如果有更好的方法,还望评论中指教。