2979. ZigZag

不挂科的敢敢

include

using namespace std;

const int MAXLEN=85;

void zig_zag(int N){
/zig_zag的行进方向只会在第一行,第一列,
对角线才会发生改变 ,且第一行的改变方向是
右下右下,第一列的改变方向也是右下右下,除第
一个元素对角线的改变方向是左上左上。
/
int z[MAXLEN][MAXLEN]={0};
bool flag1=0,flag2=0,flag3=0;
//flag1=0表示现在要改变的方向为右,flag=1表示现在
//要改变的方向为下,flag2,flag3同理
int x=1,y=1;
int dx=0,dy=1;//起始点是往右走
z[1][1]=1;
int cnt=2;//要放进去的数值
while(cnt<N*N+1){
//第一行的改变方向点
if(x==1){
if(flag1==0){
dx=0,dy=1;//向右走
flag1=1;
}
else{
dx=1,dy=0;//向下走
flag1=0;
}
}
if(y==1){
if(flag2==0){
dx=0,dy=1;
flag2=1;
}
else{
dx=1,dy=0;
flag2=0;
}
}
if(x!=1&&x==y){
//向左走
if(flag3==0){
dx=0,dy=-1;
flag3=1;
}
else{
dx=-1,dy=0;
flag3=0;
}
}
x+=dx, y+=dy;
z[x][y]=cnt;
cnt++;
}
for(int i=1;i<=N;i++){
for(int j=1;j<N;j++){
cout<<z[i][j]<<” “;
}
cout<<z[i][N];//没有空格
cout<<endl;
}
}
int main(){

ifndef ONLINE_JUDGE

freopen("test.txt", "r", stdin);

endif

int T=0;
cin>>T;
int cnt=0;
while(T--){
    cout<<"case #"<<cnt<<":"<<endl;
    int N=0;
    cin>>N;
    zig_zag(N);
    cnt++;
}

}

Nother

include

using namespace std;
vector> bg(int a)
{
vector> ans;
vector now;
for (int i=0;i>T;
for (int I=0;I>N;
cout<<”case #”<<I<<”:”<<endl;
vector> bgn=bg(N);
int x=0,y=0,len=1,flag=0,num=1; //flag 控制行走方向,0为右,1为左,2为上,3为下
while (x!=N && y!=N)//len控制当前边长,num为当前填的数
{
bgn[x][y]=num;
num++;
if (flag==0)
{
x++;
if (x==len && y==0)
{
flag=3;
}
if (x==len && y!=0)
{
flag=2;
}
}
else
{
if (flag==3)
{
y++;
if (y==len && x==len)
{
flag=1;
}
if (x==0)
{
flag=0;
len++;
}
}
else
{
if (flag==1)
{
x–;
if (x==0)
{
flag=3;
}
}
else
{
if (flag==2)
{
y–;
if (y==0)
{
flag=0;
len++;
}
}
}
}
}
}
for (int i=0;i<bgn.size();i++)
{
for (int j=0;j<bgn.size();j++)
cout<<bgn[j][i]<<” “;
cout<<endl;
}
}
return 0;
}
找到普遍规律,改变方向

Li Dao

题解
类似于eoj 2983
蛇形图案

Li Dao

题解

include

using namespace std;
int T,n,now;
int tu[100][100];
void paint(int aa)
{
if(aa%2==0)
{
for(int i=1;i<=aa;i++) tu[i][aa]=now++;
for(int j=aa-1;j>=1;j–) tu[aa][j]=now++;
}
else
{
for(int j=1;j<=aa;j++) tu[aa][j]=now++;
for(int i=aa-1;i>=1;i–) tu[i][aa]=now++;
}
return;
}
int main()
{
cin>>T;
for(int step=0;step>n;
now=1;
for(int i=1;i<=n;i++) paint(i);
printf(“case #%d:\n”,step);
for(int i=1;i<=n;i++)
{
int ff=1;
for(int j=1;j<=n;j++)
{
if(ff) ff=0;else cout<<’ ‘;
cout<<tu[i][j];
}
cout<<endl;
}
}
return 0;
}

直接模拟,和螺旋矩阵差不多

你当前正在回复 博客/题目
存在问题!