| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 762 人关注过本帖
标题:数字按规则存放出问题了,大神们帮忙改改!
只看楼主 加入收藏
丁松
Rank: 2
来 自:重庆
等 级:论坛游民
威 望:1
帖 子:41
专家分:75
注 册:2015-11-11
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:6 
数字按规则存放出问题了,大神们帮忙改改!
将数字按照一定规则有序填入一个n*n的矩阵,给定正整数n(0<n<10),产生如下所示的数字图形:
n=1时:
1
n=2时:
1  2
4  3
n=3时:
1  2  3
8  9  4
7  6  5
n=4时:
1  2  3  4
12 13 14 5
11 16 15 6
10 9  8  7




#include<iostream.h>
void main()
{
    int a[100][100];
    int i=1,j=1,k=2,n,m=0;
    cin>>n;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
            a[i][j]=0;
    }
for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
            cout<<a[i][j]<<" ";
        cout<<endl;
    }
    i=1;j=1;
a[i][j]=1;


while(k<=n*n)
{
    a[i][j]=1;
    while(i==1+m)//&&(j==1+m))
    {
        j++;
        a[i][j]=k;
        k++;
        if(j==n-m)
            break;
    }
    while(j==n-m)//&&(i==1+m))
    {
        i++;
        a[i][j]=k;
        k++;
        if(i==n-m)
            break;
    }
    while(i==n-m)//&&(j==n-m))
    {
        j--;
        a[i][j]=k;
        k++;
        if(j==1+m)
            break;
    }
    while(j==1+m)//&&(i==n-m))
    {
        i--;
        a[i][j]=k;
        k++;
        if(i==1+m)
        break;        
    }
    m++;
}


    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
            cout<<a[i][j]<<" ";
        cout<<endl;
    }
}



搜索更多相关主题的帖子: include 正整数 
2015-11-19 21:52
丁松
Rank: 2
来 自:重庆
等 级:论坛游民
威 望:1
帖 子:41
专家分:75
注 册:2015-11-11
收藏
得分:0 
谁有代码借鉴下噻
2015-11-19 21:52
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:10 
记得早期帮人写过5*5的,用的算法我把它叫做行程开关法,现改成10以内的正数代码如下:
程序代码:
#include <stdio.h>
void main()
{
    int i,j,x,y,n,*p,x1,y1,a[10][10],s[4][2]={0,1,1,0,0,-1,-1,0};
    while(scanf("%d",&n))
    {
        p=&a[0][0];
        for(i=0;i<100;i++)p[i]=0;
        if(n<0||n>10)break;
        for(i=0,j=0,x=0,y=0;i<n*n;i++)
        {
            a[x][y]=i+1;
            x1=x+s[j][0];
            y1=y+s[j][1];
            if(x1>=n||y1>=n||x1<0||y1<0||a[x1][y1])
            {
                j++;
                if(j>=4)j=0;
                x1=x+s[j][0];
                y1=y+s[j][1];
            }
            x=x1;y=y1;
        }
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)printf("%02d ",a[i][j]);
            printf("\n");
        }
    }
}
图片附件: 游客没有浏览图片的权限,请 登录注册


能编个毛线衣吗?
2015-11-19 23:28
丁松
Rank: 2
来 自:重庆
等 级:论坛游民
威 望:1
帖 子:41
专家分:75
注 册:2015-11-11
收藏
得分:0 
谢谢了哈
2015-11-20 11:21
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:10 
凑个热闹。
程序代码:
#include <stdio.h>
#include <math.h>

int cal(int n, int r, int c)
{
    int i, t;
    i = r < n - r - 1 ? r : n - r - 1;
    t = c < n - c - 1 ? c : n - c - 1;
    if(i > t) i = t;
    t = 4 * i * (n - i) + 1;
    r -= i;
    c -= i;
    n -= i * 2;
    return r <= c ? t + r + c : t + 4 * n - r - c - 4;
}

int main()
{
    int n, i, j, k;
    scanf("%d", &n);
    k = log10(n * n) + 2;
    for(i = 0; i < n; puts(""), i++)
        for(j = 0; j < n; j++)
            printf("%*d", k, cal(n, i, j));
    return 0;
}

重剑无锋,大巧不工
2015-11-20 16:09
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 

纯数学的,又看不懂了!
计算显示宽度的算式在vs2010里需要强制类型转换为“k = log10(float(n * n)) + 2;”,否则无法通过编译

能编个毛线衣吗?
2015-11-20 16:29
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 6楼 wmf2014
过奖了。这种螺旋阵我以前就在这里写过,可惜找不到了。这是个很有规律的排列,你的行程开关法也是在利用其中的规律。思考角度不同会展现不同的规律,它还可以用三角函数解,也不必是个方阵。

有兴趣大家可以试试生成任意尺寸的螺旋矩阵。

重剑无锋,大巧不工
2015-11-20 19:15
快速回复:数字按规则存放出问题了,大神们帮忙改改!
数据加载中...
 
   



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

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