| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2251 人关注过本帖
标题:三维立体螺旋矩阵
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
C# 和C和c++ 是一个祖宗吗  (是否同源)

DO IT YOURSELF !
2012-12-12 20:46
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
这要看你说的同源指的是什么了。在我看来它们三个只是长的像一些(部分语法相同)而已,并没有太大关系。

C++借鉴了C的语法加入了面向对象的性质。

C#则借鉴了C++和JAVA的语法,实现理念和JAVA非常像,可以认为是微软为了对抗JAVA而开发出的武器。

大概是先入为主吧,我个人觉得C#的语法比JAVA更优美一些。但最近由于对android感兴趣而开始使用JAVA,越来越觉得JAVA也很不错。

呵呵,好像跑题了,把楼主的楼盖歪了,见谅!

重剑无锋,大巧不工
2012-12-12 21:04
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
厉害就2个字

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

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

小小战士,战士中的战斗机!
2012-12-12 21:25
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3452
专家分:19340
注 册:2012-3-31
收藏
得分:6 
路过

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-12-12 21:30
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:6 
程序代码:
#include <stdio.h>
#include <math.h>
#define N 10

void spaces(int n)
{
    while (n--) putchar(' ');
}

void print(int (*matrix)[N+N-1], int n)
{
    int i, j, k, width, rows, cols;
    rows = cols = (n << 1) - 1;
    width = (int)log10(n * n) + 2;
    for (i = 0; i < rows; ++i) {
        for (j = 0; !matrix[i][j]; spaces(width)) ++j;
        for (k = j; j < k + n - 1; printf("%-*d", width + 1, matrix[i][j++])) ;
        for (; j < cols && matrix[i][j]; printf("%-*d", width, matrix[i][j++])) ;
        putchar('\n');
    }
}

void initialize(int (*matrix)[N+N-1], int n)
{
    int i, j, row, col, k = n, count;
    for (i = n - 1, j = 0, count = 1; k > 0; k -= 2, ++i, ++j) {
        row = col = 0; matrix[i][j] = count;
        for (; col < k - 1; matrix[i+row][j+col++] = count++) ;
        for (; row < k - 1; matrix[i+row++][j+col] = count++) ;
        for (; col > 0; matrix[i+row][j+col--] = count++) ;
        for (; row > 0; matrix[i+row--][j+col] = count++) ;
    }
    for (i = n - 2, j = 1, k = 2; k < n + 1; ++k, --i, ++j) {
        for (count = k, row = col = 0; col < n - 1; matrix[i+row][j+col++] = count++) ;
        for (; row < n; matrix[i+row++][j+col] = count++) ;
    }
}

int main(void)
{
    int matrix[N+N-1][N+N-1] = { 0 }, n;
    scanf("%d", &n);
    getchar();
    initialize(matrix, n);
    print(matrix, n);
    return 0;
}


思路,先生成左下的螺旋矩阵,然后依次往右上方向移一个位置开始cube顶部的一行和右侧的一例。
比如n=5时:

先是左下角的螺旋矩阵:
            *   *   *   *   *
         *   *   *   *   *  **
      *   *   *   *   *  *  **
   *   *   *   *   *  *  ** **
1   2   3   4   5  *  *  ** **
16  17  18  19  6  *  ** **
15  24  25  20  7  *  **
14  23  22  21  8  **
13  12  11  10  9
然后:
            *   *   *   *   *
         *   *   *   *   *  **
      *   *   *   *   *  *  **
   2   3   4   5   6  *  ** **
1   2   3   4   5  7  *  ** **
16  17  18  19  6  8  ** **
15  24  25  20  7  9  **
14  23  22  21  8  10
13  12  11  10  9
然后:
            *   *   *   *   *
         *   *   *   *   *  **
      3   4   5   6   7  *  **
   2   3   4   5   6  8  ** **
1   2   3   4   5  7  9  ** **
16  17  18  19  6  8  10 **
15  24  25  20  7  9  11
14  23  22  21  8  10
13  12  11  10  9
...
直到:
            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
图片附件: 游客没有浏览图片的权限,请 登录注册

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

杨大哥的cal函数很难看懂啊、

[ 本帖最后由 lz1091914999 于 2012-12-13 00:50 编辑 ]

My life is brilliant
2012-12-13 00:48
小小战士
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
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 28楼 小小战士
确定一个最大数的宽度,格式需要。

My life is brilliant
2012-12-13 20:40
cyhdahua
Rank: 7Rank: 7Rank: 7
来 自:山东
等 级:黑侠
威 望:2
帖 子:221
专家分:643
注 册:2012-6-15
收藏
得分:6 
学习了一下

WE GO
2012-12-13 21:39
快速回复:三维立体螺旋矩阵
数据加载中...
 
   



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

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