| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1338 人关注过本帖
标题:有点纠结,蛇形矩阵(二维数组),有点bug
只看楼主 加入收藏
weipeng1217
Rank: 5Rank: 5
等 级:职业侠客
帖 子:175
专家分:386
注 册:2012-1-12
结帖率:77.78%
收藏
已结贴  问题点数:50 回复次数:16 
有点纠结,蛇形矩阵(二维数组),有点bug
题目:
设计一个二维数组,按图示输出。(蛇形数组)
1  2  6  7
3  5  8 13
4  9 12 14
10 11 15 16


N值为4的时候,能正确输出,但是大于4之后,后面几圈就有问题了。
如图:
图片附件: 游客没有浏览图片的权限,请 登录注册


可能是for(n=1;n<2*N-2;n++)这里对n的控制有问题,当n>=N的时候,如果能n--的话就完美了。。
我不想把代码整的太长,有啥好的办法么?
那个三目运算的判断没搞成。。。


我的代码:
程序代码:
#include <stdio.h>
#define N 4
int count=1;  //初值
int main(int argc,char **argv)
{
    int a[N][N]={0};
    int i,j;
    int n;
    a[0][0] = count++;    
    
    for(n=1;n<2*N-2;n++)
    {
        if(n%2)//偶数
        {
            for(i=0,j=n;j>=0,i<=n;i++,j--)
            {
                if (a[i][j] == 0 )
                
                    a[i][j] = count++;
            }
        }
        
        else //奇数
        {

            for(i=n,j=0;i>=0,j<=n;i--,j++)
            {
                if (a[i][j] == 0 )
                    a[i][j] = count++;
            }    
        }
    }

    a[N-1][N-1] = count++;    
    
    for(i = 0;i < N;i++)//输出结果
    {
        for(j = 0;j < N;j++)
        {
            printf("%3d ",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}


[ 本帖最后由 weipeng1217 于 2013-6-17 22:51 编辑 ]
搜索更多相关主题的帖子: color 
2013-06-17 22:45
雪狼MJ
Rank: 8Rank: 8
来 自:甘肃
等 级:蝙蝠侠
威 望:4
帖 子:267
专家分:853
注 册:2012-5-27
收藏
得分:0 
把这里改成这样就好了:for(i=0,j=n;j>=0 && i<=n;i++,j--)


这是N=5的输出结果:
  1   2   6   7  15
  3   5   8  14  16
  4   9  13  17  22
 10  12  18  21  23
 11  19  20  24  25
请按任意键继续. . .

Edsger Dijkstra:算法+数据结构=程序
2013-06-17 22:59
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:0 
以下是引用雪狼MJ在2013-6-17 22:59:30的发言:

把这里改成这样就好了:for(i=0,j=n;j>=0 && i<=n;i++,j--)


这是N=5的输出结果:
  1   2   6   7  15
  3   5   8  14  16
  4   9  13  17  22
 10  12  18  21  23
 11  19  20  24  25
请按任意键继续. . .

好像不行吧!N=7时:
图片附件: 游客没有浏览图片的权限,请 登录注册

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-06-17 23:18
雪狼MJ
Rank: 8Rank: 8
来 自:甘肃
等 级:蝙蝠侠
威 望:4
帖 子:267
专家分:853
注 册:2012-5-27
收藏
得分:0 
这是我再次运行的结果,这里N=7:

结果为:
  1   2   6   7  15  16  28
  3   5   8  14  17  27  29
  4   9  13  18  26  30  39
 10  12  19  25  31  38  40
 11  20  24  32  37  41  47
 21  23  33  36  42  46  48
 22  34  35  43  45  49  51
请按任意键继续. . .

很神奇不是吗?

Edsger Dijkstra:算法+数据结构=程序
2013-06-17 23:35
雪狼MJ
Rank: 8Rank: 8
来 自:甘肃
等 级:蝙蝠侠
威 望:4
帖 子:267
专家分:853
注 册:2012-5-27
收藏
得分:0 
这个可能和底层的机器或编译有关,我这里列出可能有问题的地方:

1. for(n=1;n<2*N-2;n++)

2. for(i=0,j=n;j>=0 && i<=n;i++,j--)

3. if (a[i][j] == 0 )
               
                    a[i][j] = count++;

4. for(i=n,j=0;i>=0 &&j<=n;i--,j++)

更保险的做法是优先级的都加括号,if和for语句的都加大括号限定作用域。

我改代码的时候第四个问题是没加&&的,可能问题就出在第四个了

大兵,你把第四个改过来了再运行看看


Edsger Dijkstra:算法+数据结构=程序
2013-06-17 23:42
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:0 
回复 5楼 雪狼MJ
N=7时,最后该是49的!而你的是51啊!!

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-06-17 23:43
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:0 
回复 5楼 雪狼MJ
我加了,也不对啊!!

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-06-17 23:44
雪狼MJ
Rank: 8Rank: 8
来 自:甘肃
等 级:蝙蝠侠
威 望:4
帖 子:267
专家分:853
注 册:2012-5-27
收藏
得分:0 
好吧,我还没注意到这一层,这个算法还有点绕,今天没时间了,等有时间再研究

Edsger Dijkstra:算法+数据结构=程序
2013-06-17 23:56
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:0 
回复 8楼 雪狼MJ
我也要睡了,,,,明天再看吧!!

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-06-17 23:59
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
第一次看见这样的蛇形填数,凑热闹来瞅瞅~


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-18 00:28
快速回复:有点纠结,蛇形矩阵(二维数组),有点bug
数据加载中...
 
   



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

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