题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4706
用一个三维数组来存贮要表示的矩阵,先画几个特例找规律,记住这个N是倒的...
代码:
#include<iostream>
#include<cstdio>
using namespace std;
char p[11][11][11];
int main()
{
for(int i=1;i<11;i++)
for(int j=1;j<11;j++)
for(int k=1;k<11;k++)
p[i][j][k]=' ';
int cnt=0;
for(int i=3;i<=10;i++)
{
for(int j=1;j<=3*i-2;j++)
{
if(j<=i)
{
p[i][j][1]=char('a'+cnt%26);
}
else if(j<=2*i-2)
{
p[i][2*i-j][j-i+1]=char('a'+cnt%26);
}
else
{
p[i][j-2*i+2][i]=char('a'+cnt%26);
}
cnt++;
}
}
for(int i=3;i<=10;i++)
{
for(int j=1;j<=i;j++)
{
for(int k=1;k<=i;k++)
cout<<p[i][j][k];
cout<<endl;
}
}
}
小白书上有一题蛇形数组输出,顺便写了一下
代码:
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
int a[100][100];
bool vis[100][100];
void init()
{
memset(vis,0,sizeof(vis));
}
int main()
{
int n;
while(cin>>n)
{
init();
int i,j;
i=0;j=0;
int way=0;
int count=0;
while(count<n*n)
{
if(!vis[i][j]&&i<n&&j<n)
{
a[i][j]=count+1;
// cout<<i<<' '<<j<<endl;
vis[i][j]=1;
count++;
}
else
if(way==0)
{
if(j+1<n&&!vis[i][j+1])
j++;
else way=(way+1)%4;
}
else if(way==1)
{
if(i+1<n&&!vis[i+1][j])
i++;
else way=(way+1)%4;
}
else if(way==2)
{
if(j-1>=0&&!vis[i][j-1])
j--;
else way=(way+1)%4;;
}
else
{
if(i-1>=0&&!vis[i-1][j])
i--;
else way=(way+1)%4;
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
cout<<a[i][j]<<' ';
cout<<endl;
}
}
}