| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 334 人关注过本帖
标题:c打印螺旋矩阵。欢迎交流。
取消只看楼主 加入收藏
上帝的忏悔书
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-11-26
收藏
 问题点数:0 回复次数:0 
c打印螺旋矩阵。欢迎交流。

#include<stdio.h>
#include<math.h>
int an(int i,int j);     
void bn (int x);
void cn(int x)               /* 已知数求位置坐标的函数*/
{
    int i,m;
    i=(int)sqrt(x);
    m=(i*i+(i+1)*(i+1)+1)/2;
    if(x==1)
        printf("1=(0,0)\n");
    else
    {
        if(x==(i*i))
        {
            if(i%2)
                printf("%d=(%d,%d)\n",x,(i-1)/2,-(i-1)/2);
            else
                printf("%d=(%d,%d)\n",x,-i/2+1,i/2);
        }
        else
        {
            if (i%2)
            {
                if(x<=m)
                {
                    i;
                    printf("%d=(%d,%d)\n",x,(i+1)/2,(i+1)/2-(m-x));
                }
                else
                {
                    i;
                    printf("%d=(%d,%d)\n",x,(i+1)/2-(x-m),(i+1)/2);
                }
            }
            else
            {
                if(x<=m)
                {
                    int n;
                    n=(-i)/2+(m-x);
                    printf("%d=(%d,%d)\n",x,(-i)/2,(-i)/2+(m-x));
                }
                else
                {
                    i;
                    printf("%d=(%d,%d)\n",x,(-i)/2+(x-m),(-i)/2);
                }
            }
        }
}
}
void main()                   /* 主函数*/
{
    int x,y,z;
    printf("输入一个数字可求其对应坐标:\n");
    scanf("%d",&x);
    cn(x);
    printf("输入一个坐标可求其对应数字.(只输入坐标值)\n");
    scanf("%d%d",&y,&z);
    printf("%d\n",an(y,z));
    printf("输入一个数字N可打印其N阶方阵图形:\n");
    scanf("%d",&y);
    bn(y);
}
void bn (int x)                /* 打印出数列图形的函数*/
{
    int i,j;
    for (j=-((x-1)/2);j<=x/2;j++)
    {
        for(i=-((x-1)/2);i<=x/2;i++)
            printf("%d\t",an(i,j));
        printf("\n");
    }
}
int an(int i,int j)           /* 已知位置坐标求数字的函数*/
{
    int i1,j1,ij;
    i1=abs(i);
    j1=abs(j);
    if (i1<j1)
    {
        ij=i1;
        i1=j1;
        j1=ij;
    }
    if (i+j>0)
    {
        i1=2*i1-1;
        ij=(i1*i1+(i1+1)*(i1+1)+1)/2;
        return ij+j-i;
    }
    else
    {
        i1=2*i1;
        ij=(i1*i1+(i1+1)*(i1+1)+1)/2;
        return ij+i-j;
    }  
}
搜索更多相关主题的帖子: void include 
2012-11-29 12:59
快速回复:c打印螺旋矩阵。欢迎交流。
数据加载中...
 
   



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

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