| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3808 人关注过本帖
标题:为什么这样没有输出结果?不知道哪里错了
只看楼主 加入收藏
meitsuen
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-5-4
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:3 
为什么这样没有输出结果?不知道哪里错了
题目描述
n×n的蛇形方阵当n=5时如下的形式
 
1   3   4   10   11
2    5    9    12   19
6    8   13    18   20
7    14   17   21   24
15   16    22     23   25
 
请给出一个程序,对于任意的输入n(0<n<21),输出按照上面规律所获得的n×n的蛇形方阵。
输入
输入为一个整数n (0<n<21),代表要生成的蛇形方阵大小为n*n;
 
输出
输出n×n方阵(一个方阵的同一行数据之间以'\t'分隔)
示例输入
4
示例输出
1   3   4   10
2    5    9    11
6    8   12    15
7    13   14   16
将螺旋方阵存放到N*N的二维数据中并打印输出。

我写的程序:
#include <iostream.h>
void main()
{
    int a[5][5],n=5;
    int k=1,i=0,j=0,flag=1;
    for(k;k<=n*n;k++)
    {
        a[i][j]=k;
        if(flag==1)//dowm
        {
            i++;j--;
        if(j<0||i>n-1)
        {
            flag=-flag;
            if(j<0)
                j++;
            else
            {
                j=j+2;
                i--;
            }
        }
        else //up
        {
            i--;j++;
                if(i<0||j>n-1)
                {
                    flag=-flag;
                    if(i<0)
                        i++;
                    else
                    {
                        i=i+2;
                        j--;
                    }
                }
        }
    }
   
}
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)
                cout<<a[i][j]<<" ";
            cout<<endl;
}
2016-05-04 18:48
我不信
Rank: 2
等 级:论坛游民
威 望:1
帖 子:33
专家分:24
注 册:2016-3-3
收藏
得分:0 
程序代码:
#include <iostream.h>

 void main()

 {
     int a[4][4],n=5;//这里应该是a[4][4]吧
     int k,i=0,j=0,flag=1;
     for(k=1;k<=n*n;k++)
     {
         a[i][j]=k;
         if(flag==1)
         {
             i++;j--;
           if(j<0||i>n-1)
           {
             flag=-flag;
             if(j<0)
                 j++;
             else 
             {
                 j=j+2;
                 i--;
             }
           }
         }
         else
         {
             i--;j++;
                 if(i<0||j>n-1)
                 {
                     flag=-flag;
                     if(i<0)
                         i++;
                     else
                     {
                         i=i+2;
                         j--;
                     }
                 }
         }
     }
          for(i=0;i<n;i++)
          { for(j=0;j<n;j++)
                 cout<<a[i][j]<<" ";
             cout<<endl;
          }

 } 
其余的就是改了下括号之类的没写对。感觉算法还有点瑕疵,勉强能运行
2016-05-04 19:27
meitsuen
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-5-4
收藏
得分:0 
回复 2楼 我不信
运行出来不对啊,不是蛇形矩阵了
2016-05-04 19:39
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:5 
#include<iostream>
using namespace std;
int main()
{
    short n;/*边长*/short i;/*循环体索引*/bool flag;/*记录蛇身当前走向,往右上为真,左下为假*/
    cout<<"输入矩阵边长:";
    cin>>n;
    short*arr=new short[n*n];
    short**arr2d;
    arr2d=new short*[n];
    for(i=0;i<n;i++)/*建立二维数组*/
        arr2d[i]=new short[n];
    for(i=0;i<n*n;i++)//建立一维数组,用来给二维数组赋值
        arr[i]=i+1;
    short x=0,y=0;//初始化二维数组下标
    arr2d[x][y]=arr[0];
    for(i=1;i<n*n;i++)
    {
        if(x==0)
        {
            if(y%2==0)
            {
                if(y<n-1)
                {
                    y++;arr2d[x][y]=arr[i];flag=true;
                }
                else
                {
                    x++;arr2d[x][y]=arr[i];flag=true;
                }
            }
            else
            {
                y--;x++;arr2d[x][y]=arr[i];flag=true;
            }
        }
        else
        {
            if(y==0)
            {
                if(x%2==0)
                {
                    x--;y++;arr2d[x][y]=arr[i];flag=false;
                }
                else
                {
                    if(x<n-1)
                    {
                        x++;arr2d[x][y]=arr[i];flag=false;
                    }
                    else
                    {
                        y++;arr2d[x][y]=arr[i];flag=false;
                    }
                }
            }
            else
            {
                if(flag)
                {
                    if(x<n-1)
                    {
                        y--;x++;arr2d[x][y]=arr[i];
                    }
                    else
                    {
                        y++;arr2d[x][y]=arr[i];flag=false;
                    }
                }
                else
                {
                    if(y<n-1)
                    {
                        y++;x--;arr2d[x][y]=arr[i];
                    }
                    else
                    {
                        x++;arr2d[x][y]=arr[i];flag=true;
                    }
                }
            }
        }
    }
    for(short idx=0;idx<n;idx++)
    {
        for(i=0;i<n;i++)
            cout<<arr2d[i][idx]<<'\t';
        cout<<endl;
    }
    return 0;
}
2016-05-04 20:21
快速回复:为什么这样没有输出结果?不知道哪里错了
数据加载中...
 
   



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

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