好吧,万能的递归------上三角数阵

对角线之上称为“上三角”。
请你设计一个用于填充n阶方阵的上三角区域的程序。填充的规则是:使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充。
例如:当n=3时,输出:
1 2 3
6 4
5
当n=4时,输出:
1 2 3 4
9 10 5
8 6
7
当n=5时,输出:
  1 2 3 4 5
 12 13 14 6 
 11 15 7
 10 8
  9

以上是题目。
---------------------------------------------------分割线---------------------------------------------------

通过我半小时的努力,算的我头昏脑胀之后,终于写出来了,啥都不说了,直接看代码吧:

#include <iostream>
#include <iomanip>
using namespace std;

int total=15;
int **ta;
static int value=1;
static int num=0;

int elenum(int n)
{
    if(n==1)return 1;
    return n+elenum(n-1);
}
void test(int *a[],int n)
{
        if(n<1)return;
        int i,j;
        for(i=num;i<n;i++)
        {
            if(value>elenum(total))return;
            a[num][i]=value++;
        }
        for(j=n-2,i=num+1;j>=num;j--,i++)
        {
            if(value>elenum(total))return;
           
            a[i][j]=value++;
        }
        for(i=n-2;i>num;i--)
        {
            if(value>elenum(total))return;
            a[i][num]=value++;
        }
        num++;
        test(ta,n-2);
}

int main(int argc, char* argv[])
{
   
    ta=(int**)malloc(sizeof(int*)*total);
    for(int i=0;i<total;i++)
    {
        ta[i]=(int*)malloc(sizeof(int)*total);
    }
    for(i=0;i<total;i++)
        for(int j=0;j<total;j++)
            ta[i][j]=0;

    test(ta,total);

    for(i=0;i<total;i++)
    {
        for(int j=0;j<total;j++)
        {
            if(ta[i][j]==0)continue;
            cout<<std::setw(5)<<ta[i][j];
        }
        cout<<endl;
    }
}

 

------------------------------分割线------------------------------

以下是结果:


图片

 

代码中有不懂的地方或者用什么bug可以写邮件到490733206@qq.com,3Q。

                                        --By[root@尘ぜ]#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值