频道栏目
首页 > 网络 > 云计算 > 正文

不一样的S型方阵

2017-01-10 09:45:00         来源:陌初的专栏  
收藏   我要投稿

\

 

纯模拟,从(1,n)位置开始模拟,到达行边界考虑右下方是否有值,没有就右下走,有就往左走,到达列边界考虑左上方是否有值,没有就往左上方走,有就往下走

 

#include <stdio.h>  
#include <memory.h>  
using namespace std;  
#define MAX 31  
int n;  
int a[MAX][MAX];  
  
void Init();  
void Order();  
void vOut();  
  
int main()  
{  
    while(1==scanf("%d",&n))  
    {  
        Init();  
        Order();  
        vOut();  
    }  
    return 0;  
}  
void Init()  
{  
    memset(a,0,sizeof(a));  
}  
void Order()  
{  
    int i,j,dig;  
    dig=1;  
    i=1;  
    j=n;  
    a[i][j]=dig;  
    a[i][--j]=++dig;  
    a[++i][++j]=++dig;  
    int flag=0;  
    int sum=n*(n+1)/2;  
    while(dig<sum)  
    {  
        if(i==1)  
        {  
            if(a[i+1][j+1]!=0)  
            {  
                a[i][--j]=++dig;  
                flag=1; //从上往下  
            }  
            else  
            {  
                a[++i][++j]=++dig;  
                 flag=1; //从上往下  
            }  
        }  
        else if(j==n)  
        {  
            if(a[i-1][j-1]!=0)  
            {  
                a[++i][j]=++dig;  
                 flag=2; //从下往上  
            }  
            else  
            {  
                a[--i][--j]=++dig;  
                flag=2; //从下往上  
            }  
  
    }  
        if(flag==1)  
        {  
            a[++i][++j]=++dig;  
        }  
        else if(flag==2)  
        {  
             a[--i][--j]=++dig;  
        }  
    }  
    sum=n*n;  
    while(dig<=sum)  
    {  
        if(j==1)  
        {  
            if(a[i+1][j+1]!=0)  
            {  
                a[++i][j]=++dig;  
                flag=1; //从上往下  
            }  
            else  
            {  
                a[++i][++j]=++dig;  
                 flag=1; //从上往下  
            }  
        }  
        else if(i==n)  
        {  
            if(a[i-1][j-1]!=0)  
            {  
                a[i][--j]=++dig;  
                 flag=2; //从下往上  
            }  
            else  
            {  
                a[--i][--j]=++dig;  
                flag=2; //从下往上  
            }  
        }  
        if(flag==1)  
        {  
            a[++i][++j]=++dig;  
        }  
        else if(flag==2)  
        {  
             a[--i][--j]=++dig;  
        }  
    }  
  
}  
void vOut()  
{  
    int i,j;  
    for(i=1;i<=n;i++)  
    {  
        for(j=1;j<=n;j++)  
        {  
            printf("%4d",a[i][j]);  
        }  
            printf("\n");  
    }  
    for(i=1;i<=n;i++)  
    {  
        printf("====");  
    }  
    printf("\n");  
}  

结果显示:

 

\

相关TAG标签 S型方阵
上一篇:hive表分区
下一篇:hive中内置操作符
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站