| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 663 人关注过本帖, 1 人收藏
标题:如何输入一个数来确定2维数组的规格
只看楼主 加入收藏
mylzy159
Rank: 2
等 级:论坛游民
帖 子:61
专家分:23
注 册:2009-4-12
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:8 
如何输入一个数来确定2维数组的规格
#include<iostream>
using namespace std;
int a[5][5];
void fun(int x,int y,int n,int sum)
{
    if(a[x][y]==0)
    {
        sum++;
        a[x][y]=sum;
        fun(x,y,n,sum);
    }
    if(a[x][y+1]==0&&y+1<n)
    {
        y++;
        sum++;
        a[x][y]=sum;
        fun(x,y,n,sum);
    }
    if(a[x+1][y]==0&&x+1<n)
    {
        x++;
        sum++;
        a[x][y]=sum;
        fun(x,y,n,sum);
    }
    if(a[x][y-1]==0&&y-1>=0)
    {
        y--;
        sum++;
        a[x][y]=sum;
        fun(x,y,n,sum);
    }
    if(a[x-1][y]==0)
    {
        while(a[x-1][y]==0)
        {
            x--;
            sum++;
            a[x][y]=sum;
        }
        fun(x,y,n,sum);
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
            cout<<a[i][j]<<' ';
        cout<<endl;
    }
    exit(0);
}
void main()
{
    int n,x=0,y=0,sum=0;
    n=5;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            a[i][j]=0;
    fun(x,y,n,sum);
}
如何输入一个数来确定2维数组的规格..求教.这螺旋问题是要求输入一个数.我把他定成了5..
搜索更多相关主题的帖子: 规格 输入 
2010-04-26 17:18
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:20 
你是根据全局的变量自动初始化为0来判断,
a[x][y]是否是数组的元素是吗?
这样做似乎不是很保险噢,
如果越界了,而且这个内存部分也是存储0怎么办?
编译器也不会报错。

你是要实现什么功能呢?或许用动态数组会比较好。

南国利剑
2010-04-26 18:23
mylzy159
Rank: 2
等 级:论坛游民
帖 子:61
专家分:23
注 册:2009-4-12
收藏
得分:0 
回复 2楼 南国利剑
就是输入一个数N...让2维数组变成a[N][N]的规格..动态数组?..要用vector?
2010-04-27 09:05
shiyuehai
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:96
专家分:116
注 册:2009-9-4
收藏
得分:0 
动态数组不是这样实现的吧!!!再说你都定义数组的为a[5][5]怎么还能动态啊
2010-04-27 09:12
mylzy159
Rank: 2
等 级:论坛游民
帖 子:61
专家分:23
注 册:2009-4-12
收藏
得分:0 
回复 4楼 shiyuehai
我知道..我把题目贴出来吧/. 看你们怎么做的.
  输入一个数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
2010-04-27 16:47
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
我给你提供一个程序,看看是否符合你的要求。(不是我写的,引用的)
程序代码:
#include<stdio.h>
int main(void)
{
    int i,x,j,y,n,a[20][20],k;
    printf("input :");
    scanf("%d",&n);
    for (i=0,y=0,k=1;i<n;i++)
    {
        x=i;
        while (x<n-i)a[x++][y]=k++;x--;k--;
        while (y<n-i)a[x][y++]=k++;y--;k--;
        while (x+1>i)a[x--][y]=k++;x++;k--;
        while (y>i)a[x][y--]=k++;y++;
    }
    printf("\n");
    for (i=0;i<n;i++)
    {
        for (j=0;j<n;j++)
            printf("%6d",a[j][i]);
        printf("\n");
    }
    return 0;
}


南国利剑
2010-04-27 19:27
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
还有一个
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int **a;
    int i,j;
    int n=1,row,direction;

    printf("Input the number of rows:");
    scanf("%d",&row);

    //set matrix
    a = (int **)malloc((row+2)*sizeof(int *));
    for (i=0;i<row+2 ;i++ )
        a[i]=(int *)calloc(row+2,sizeof(int));

    //initail wall
    for (i=0;i<row+2 ;i++ )
    {
        a[i][0]=1;
        a[0][i]=1;
        a[i][row+1]=1;
        a[row+1][i]=1;
    }
    i=1;
    j=1;
    a[1][1]=1;
    direction=1; /* 1 right,2 down,3 left, 4 up */
  
    while(n<row*row)
    {
        if (direction==1)
        {
            if (a[i][j+1]!=0)
            {
                direction=2;
                continue;
            }
            a[i][++j] = ++n;
        }   
        else if(direction==2)
        {
            if (a[i+1][j]!=0)
            {
                direction=3;
                continue;
            }
            a[++i][j] = ++n;
        }
        else if(direction==3)
        {
            if (a[i][j-1]!=0)
            {
                direction=4;
                continue;
            }
            a[i][--j] = ++n;
        }
        else
        {
            if (a[i-1][j]!=0)
            {
                direction=1;
                continue;
            }
            a[--i][j] = ++n;
        }
    }

    //printf
    for (i=1;i<=row ;i++ )
    {
        for (j=1;j<=row ;j++ )
            printf("%d ",a[i][j]);
        printf("\n");
    }

    return 0;
}

 

南国利剑
2010-04-27 19:28
mylzy159
Rank: 2
等 级:论坛游民
帖 子:61
专家分:23
注 册:2009-4-12
收藏
得分:0 
回复 7楼 南国利剑
  嗯..第2个跟我的有点类似..其实我不想定义全局2维数组的..我想把2维数组传到fun()里面.但是我不会.. 就说第2个是用的动态数组.要是我用.怎么传到我的fun函数里面啊.?
 
2010-04-27 19:56
mylzy159
Rank: 2
等 级:论坛游民
帖 子:61
专家分:23
注 册:2009-4-12
收藏
得分:0 
#include<iostream>
using namespace std;
void fun(int **a,int x,int y,int n,int sum)
{
    if(a[x][y]==0)
    {
        sum++;
        a[x][y]=sum;
        fun(a,x,y,n,sum);
    }
    if(a[x][y+1]==0&&y+1<n)
    {
        y++;
        sum++;
        a[x][y]=sum;
        fun(a,x,y,n,sum);
    }
    if(x+1<n)
    {
        if(a[x+1][y]==0)
        {
            x++;
            sum++;
            a[x][y]=sum;
            fun(a,x,y,n,sum);
        }
    }
    if(a[x][y-1]==0&&y-1>=0)
    {
        y--;
        sum++;
        a[x][y]=sum;
        fun(a,x,y,n,sum);
    }
    if(a[x-1][y]==0)
    {
        while(a[x-1][y]==0)
        {
            x--;
            sum++;
            a[x][y]=sum;
        }
        fun(a,x,y,n,sum);
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
            cout<<a[i][j]<<' ';
        cout<<endl;
    }
    exit(0);
}
void main()
{
    int n,x=0,y=0,sum=0;
    cin>>n;
    int **a=new int*[n];
    for(int i=0;i<n;i++)
        a[i]=new int[n];
    for(i=0;i<n;i++)
        for(int j=0;j<n;j++)
            a[i][j]=0;
    fun(a,x,y,n,sum);
}我自己改好了..谢谢你.
2010-04-28 17:23
快速回复:如何输入一个数来确定2维数组的规格
数据加载中...
 
   



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

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