| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2251 人关注过本帖
标题:三维立体螺旋矩阵
取消只看楼主 加入收藏
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
结帖率:93.75%
收藏
已结贴  问题点数:50 回复次数:5 
三维立体螺旋矩阵
这个想法是刚想出来的,程序还没实现,等实现了就贴出来!看看大家怎么实现,如果有实现了的请贴出来,分奉上!
① 说明思路
② 程序代码
③ 测试效果图

实现效果如下(正方体):

三维螺旋矩阵边长(10以内):5
输出如图:

            5   6   7   8   9
         4   5   6   7   8  10
      3   4   5   6   7  9  11
   2   3   4   5   6  8  10 12
1   2   3   4   5  7  9  11 13
16  17  18  19  6  8  10 12
15  24  25  20  7  9  11
14  23  22  21  8  10
13  12  11  10  9  


三维螺旋矩阵边长(10以内):10
输出如图:
                           10  11  12  13  14  15  16  17  18  19
                        9   10  11  12  13  14  15  16  17  18 20
                     8   9   10  11  12  13  14  15  16  17 19 21
                  7   8   9   10  11  12  13  14  15  16 18 20 22
               6   7   8   9   10  11  12  13  14  15 17 19 21 23
            5   6   7   8   9   10  11  12  13  14 16 18 20 22 24
         4   5   6   7   8   9   10  11  12  13 15 17 19 21 23 25
      3   4   5   6   7   8   9   10  11  12 14 16 18 20 22 24 26
   2   3   4   5   6   7   8   9   10  11 13 15 17 19 21 23 25 27
1   2   3   4   5   6   7   8   9   10 12 14 16 18 20 22 24 26 28
36  37  38  39  40  41  42  43  44  11 13 15 17 19 21 23 25 27
35  64  65  66  67  68  69  70  45  12 14 16 18 20 22 24 26
34  63  84  85  86  87  88  71  46  13 15 17 19 21 23 25
33  62  83  96  97  98  89  72  47  14 16 18 20 22 24
32  61  82  95  100 99  90  73  48  15 17 19 21 23
31  60  81  94  93  92  91  74  49  16 18 20 22
30  59  80  79  78  77  76  75  50  17 19 21
29  58  57  56  55  54  53  52  51  18 20
28  27  26  25  24  23  22  21  20  19

[ 本帖最后由 小小战士 于 2012-12-12 10:53 编辑 ]
搜索更多相关主题的帖子: 矩阵 正方体 
2012-12-12 09:56
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
还是请大家多用自己的方法实现,提高自己的水平,多思考才有进步!
这道题也不难,大家多思考,贴出自己的代码,秀一秀!

[ 本帖最后由 小小战士 于 2012-12-12 17:55 编辑 ]

小小战士,战士中的战斗机!
2012-12-12 12:21
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
①说明思路:
    三维立体螺旋矩阵通过变长二维数组实现,矩阵中最小数为1,最大数根据边长不同而不同。
    第一步,先初始化二维数组为全0,为后面打印做准备
    第二部,判断边长是奇是偶,为三维螺旋矩阵正面最后一步赋值做准备
    第三步,利用三层循环给二维数组赋值,其中最里面一层为多个for循环,分别为矩阵上边右边下边左边赋值
    第四步,利用双重循环打印三维螺旋矩阵图
②程序代码:
#include<stdio.h>
//屏幕太小,边长只到30,原则上任意边长都行
int main()
{
    int i,j,p,q,n,m,k,x;
    printf("请输入螺旋矩阵的边长(30之内):");
    scanf("%d",&n);
    int a[2*n-1][2*n-1];

    for(i=0;i<2*n-1;i++)//初始化二维数组为全0
    {
        for(j=0;j<2*n-1;j++)
        {
            a[i][j]=0;
        }
    }

    if(n%2==0)//判断奇数偶数
    {
        m=n/2;//偶数
    }
    else
    {
        m=n/2+1;//奇数
    }

    for(x=0;x<n;x++)//二维数组赋值实现三维螺旋矩阵图
    {
        for(k=x+1,p=0,q=x;p<m;p++)
        {
            i=p+n-1-q;
            j=p+q;
            if(n%2!=0&&p==m-1)//奇数最后一个数
            {
                a[i][j]=k;
                break;
            }
            for(;j<n-1-p+q;j++,k++)//上边
            {
                a[i][j]=k;
            }
            for(;i<n*2-1-q-1-p;i++,k++)//右边
            {
                a[i][j]=k;
            }
            if(x>0)//非矩阵正面,只打印上右两边
            {
                a[i++][j]=k++;
                break;
            }
            for(;j>0+p;j--,k++)//下边
            {
                a[i][j]=k;
            }
            for(;i>n-1+p;i--,k++)//左边
            {
                a[i][j]=k;
            }
        }
    }

    for(i=0;i<2*n-1;i++)//打印
    {
        for(j=0;j<n*2-1;j++)
        {
            if(a[i][j]==0)
            {   
                printf("   ");
            }
            else if(j>=2*n-1-1-i&&j>=n-1)
            {
                printf("%-3d",a[i][j]);
            }
            else
            {
                printf("%-4d",a[i][j]);
            }
        }
        printf("\n");
    }
    return 0;
}
③测试效果图:
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册


希望大家有更好的实现方式!

[ 本帖最后由 小小战士 于 2012-12-12 15:13 编辑 ]

小小战士,战士中的战斗机!
2012-12-12 14:53
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
回复 14楼 beyondyf
高,实在是高,就是看不懂 啊,怎么理解你这个程序呢?膜拜
我那个改一改也可以自动间隔空格,呵呵,本人水平有限啊,还得锤炼!

[ 本帖最后由 小小战士 于 2012-12-12 21:28 编辑 ]

小小战士,战士中的战斗机!
2012-12-12 21:25
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
嗯,两位写的程序的确高深,我先理解理解

如果谁还有什么方法,不防再来指教指教!

小小战士,战士中的战斗机!
2012-12-13 16:55
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
log10(n*n)是什么啊?看不懂啊

小小战士,战士中的战斗机!
2012-12-13 17:01
快速回复:三维立体螺旋矩阵
数据加载中...
 
   



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

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