| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 984 人关注过本帖
标题:回旋矩阵的问题
只看楼主 加入收藏
徐宗保
Rank: 1
来 自:江苏盐城
等 级:新手上路
帖 子:45
专家分:7
注 册:2012-3-4
结帖率:60%
收藏
已结贴  问题点数:20 回复次数:13 
回旋矩阵的问题
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int a[20][20];
    int i,j,m,n;
    int x1,x2,y1,y2,s;
    cin>>n;
    m=n*n;
    x1=0;x2=n;
    y1=0;y2=n;
    if(n%2==0)
    {
        i=0;j=n-1;y2=n-1;s=1;
    }
    else
    {
        i=n-1;j=0;y1=1;s=0;
    }
    while(m>=1)
    {
        if(s==1)
        {
            while(i<x2)
            {
                a[i][j]=m--;
                i++;
            }
            i--;j--;
            x2--;
            while(j>=y1)
            {
                a[i][j]=m--;
                j--;
            }
            j++;i--;
            y1++;
            s=0;
        }
        else
        {
            while(i>=x1)
            {
                a[i][j]=m--;
                i--;
            }
            i++;j++;
            y1++;
            while(j<y2)
            {
                a[i][j]=m--;
                j++;
            }
            j--;i++;
            y2--;
            s=1;
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            cout<<"  "<<a[i][j];
        cout<<endl;
    }
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: include 
2013-10-31 22:14
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:5 
没有看到问题,大哥,描述一下有那么难吗

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-11-01 15:23
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
发一坨代码出来谁帮你看?

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-11-01 15:23
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
中间那一堆堆负数  分明是没有初始化造成的  

类似代码  int b   printf("%d",b)

DO IT YOURSELF !
2013-11-01 15:50
徐宗保
Rank: 1
来 自:江苏盐城
等 级:新手上路
帖 子:45
专家分:7
注 册:2012-3-4
收藏
得分:0 
回复 3楼 yuccn
回旋矩阵,看到图片应该知道问题了啊,就是生成一个从里到外是连续自然数排列的回旋矩阵
2013-11-01 19:53
徐宗保
Rank: 1
来 自:江苏盐城
等 级:新手上路
帖 子:45
专家分:7
注 册:2012-3-4
收藏
得分:0 
回复 4楼 wp231957
我知道这是初始化引起的,但是也是因为代码出问题,我找不到问题出在,看了一个晚上,麻烦帮下忙
2013-11-01 19:54
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
没注释  没法调试啊

以前也写过  基本上就是填充二维数组

DO IT YOURSELF !
2013-11-01 20:31
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
#include<stdio.h>

int main()
{
    int a[10][10]={0};      //最大矩阵10*10
    int n=9;                //输出9*9 矩阵
    int x,y,tot;
    x=0;
    y=n-1;
    a[x][y]=1;
    tot=1;
    while(tot<n*n)
    {
        while(x+1<n && !a[x+1][y])
            a[++x][y]=++tot;
        while(y-1>=0 && !a[x][y-1])
            a[x][--y]=++tot;
        while(x-1>=0 && !a[x-1][y])
            a[--x][y]=++tot;
        while(y+1<n && !a[x][y+1])
            a[x][++y]=++tot;
    }
    for(x=0;x<n;x++)
    {
        for(y=0;y<n;y++)
            printf("%3d",a[x][y]);
        printf("\n");
    }
    return 0;
}

DO IT YOURSELF !
2013-11-01 20:34
徐宗保
Rank: 1
来 自:江苏盐城
等 级:新手上路
帖 子:45
专家分:7
注 册:2012-3-4
收藏
得分:0 
回复 8楼 wp231957
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int a[20][20]={0};              //初始化数组
    int i,j,m,n;
    int x1,x2,y1,y2,s;              //x1为矩阵上边界,x2为矩阵下边界,y1,y2为左右边界
    cin>>n;                         //输入所要生成矩阵的阶
    m=n*n;                          //m为矩阵中最大数字
    x1=0;x2=n;                      //初始化边界值
    y1=0;y2=n;                      //
    if(n%2==0)                      //当矩阵阶为偶数时
    {
        i=0;j=n-1;y2=n-1;s=1;       //从a[0][n-1]开始,s=1表示矩阵阶为偶数
    }
    else
    {
        i=n-1;j=0;y1=1;s=0;        //矩阵阶为奇数,从a[n-1][0]开始,s=0表示矩阵阶为奇数
    }
    while(m>=1)                    //
    {
        if(s==1)                   //矩阵阶为偶数时
        {
            while(i<x2)            //
            {
                a[i][j]=m--;       //a[i][j]向下方去
                i++;               //
            }
            i--;j--;               //
            x2--;                  //
            while(j>=y1)           //
            {
                a[i][j]=m--;       //a[i][j]向左边取
                j--;               //
            }
            j++;i--;               //
            y1++;                  //
            s=0;                   //
        }
        else                       //矩阵阶为奇数时
        {
            while(i>=x1)           //
            {
                a[i][j]=m--;       //a[i][j]向上方取
                i--;               //
            }
            i++;j++;               //
            y1++;                  //
            while(j<y2)            //
            {
                a[i][j]=m--;       //a[i][j]向右方取
                j++;               //
            }
            j--;i++;               //
            y2--;                  //
            s=1;                   //
        }
    }
    for(i=0;i<n;i++)               
    {
        for(j=0;j<n;j++)
            cout<<"  "<<a[i][j];
        cout<<endl;
    }
    return 0;
}

版主,注释了。。。。。麻烦了。。。。。。。
2013-11-01 21:26
潇翊
Rank: 3Rank: 3
来 自:湖北襄阳
等 级:论坛游侠
帖 子:39
专家分:131
注 册:2012-2-29
收藏
得分:5 
回复 9楼 徐宗保
随便输入个数字运行下就知道问题出在,最后两个数字1 和 2,把原本已经正常输出的4 和 5 覆盖掉了,所以问题出在最后一个循环判断啊。

神马都是浮云,技术才是王道!
2013-11-02 15:07
快速回复:回旋矩阵的问题
数据加载中...
 
   



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

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