| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2470 人关注过本帖
标题:想问个思路关于蛇形矩阵的问题
只看楼主 加入收藏
百里
Rank: 2
等 级:论坛游民
帖 子:34
专家分:66
注 册:2016-10-1
结帖率:100%
收藏
 问题点数:0 回复次数:5 
想问个思路关于蛇形矩阵的问题
怎么输出一个n*n的矩阵式蛇形矩阵?
比如输入n=4时,
怎么输出:
   1   2   6   7
   3   5   8  13
   4   9  12  14
  10  11  15  16
思路是什么?求解。
2016-11-08 12:37
百里
Rank: 2
等 级:论坛游民
帖 子:34
专家分:66
注 册:2016-10-1
收藏
得分:0 
不好意思,找到了
2016-11-08 12:46
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 2楼 百里
上面的数字规律有点看不懂,你确定是这数据么~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-08 12:52
向洪林
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:重庆市奉节县
等 级:版主
威 望:9
帖 子:118
专家分:405
注 册:2015-3-10
收藏
得分:0 
请你明白蛇形矩阵收尾都是一次增大的
例如:
7     8     1
6     9     2
5     4     3

新手上路,望大家多多照顾,谢谢!
2016-11-08 14:00
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:0 
蛇形矩阵我也是第一次遇到,下面给出我写的,会有其他更好的算法,你也可以利用论坛的搜索功能
#include<stdio.h>
#define N 8
main()
{                              
    int i,j,k,l,f=1,a=1,g=1;   //i,j for循环用不说了。k,l数组b的下标,f,g每一斜行反转时控制k,l的位置,b[k][l]中k,l会换位置
    int b[N][N];                 
    for(i = 0; i <2*N-1; i++)    //这个循环的次数为总的斜行数
    {
        if(i <= N-1)      //左上半,f来控制.g来控制右下半部分 (i>N-1),下面还有一个 if(i>N-1)
        {
            if(f == 1)
            {
               for(k = 0, l =i-k; l >= 0; l--,k++)  // [0][0] [l][K]
               {                                  //l=i-k; 第一行下边和为0,第二行下标和为1...
                  b[l][k]=a++;
               }
              f=(-1)*f;   //第二斜行会进入下面的else
             }
            else
            {
                for(k = 0, l = i-k; l >= 0; l--, k++)  //左上半部分k=0(一直都是),右下半部分k=4(每行都是)
                {
                    b[k][l]=a++;  //第二行[0][1] [1][0]
                }                 //      [k][l] [k][l]
                f=(-1)*f;
            }
         
        }
        if(i>N-1)
        {
            if(g==1)
            {
                 for(k = N-1,l=i-k; l <= N-1; k--,l++)
                 {
                    b[l][k]=a++;
                 }
                    g=(-1)*g;
            }
            else
            {
                for(k = N-1,l=i-k; l <= N-1;k--,l++)
                {
                   b[k][l]=a++;
                }
                    g=(-1)*g;
            }
        }
        
    }
    for(i = 0; i < N; i++)
    {
        for(j = 0; j < N; j++)
        {
            printf("%4d",b[i][j]);
            
        }
        printf("\n");
    }
}

[此贴子已经被作者于2016-11-8 16:09编辑过]


早知做人那么辛苦!  当初不应该下凡
2016-11-08 16:07
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
……
程序代码:
#include<stdio.h>
int main()
{
    int a[4][4];
    int x,y,z,i,t;
    for (x=y=i=0,z=1;z<=16;z++)
    {
        a[x][y]=z;//流水线赋值
        x--;
        y++;
        if (x<i)
        {
            x=y;
            y=0;
        }
        if (x>3)
        {
            x=3;
            y=i+1;
            i++;
        }
    }
    for (x=0;x<4;x++)
        for (y=x+1;y<4;y++)//局部矩阵转置
            if ((x+y)%2!=0)
            {
                t=a[x][y];
                a[x][y]=a[y][x];
                a[y][x]=t;
            }
    for (x=0;x<4;x++,printf("\n"))
        for (y=0;y<4;y++)
            printf("%5d ",a[x][y]);
}



[此贴子已经被作者于2016-11-8 18:32编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-08 16:16
快速回复:想问个思路关于蛇形矩阵的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043272 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved