递推递归练习——O

题目要求:

n×n的螺旋方阵当n=5和n=3时分别是如下的形式 

  
对于任意的输入n(0<n<11),输出按照上面规律所获得的n×n的螺旋方阵。

题目思路:

利用while函数嵌套按顺序对第一行,最后一列,最后一行,第一列求值,循环往下求值。先求出所给值的1/2, 若能整除则赋值给t,不能整出则加1后赋值给t,利用t判断while的出口。

细节处理:

若N不能被2整除 需要对方阵最中间单独赋值。

#include<bits/stdc++.h>

using namespace std;
int main()
{  int a[100][100]={0},n,i,N,j,num,c,k,t,m;
while(cin>>m)
{while(m--)
 {cin>>N;
 n=N-1;j=0;i=0;num=1;k=0;
 if(N%2==0) t=N/2;
 else t=N/2+1;
while(k<t)
{
    c=1;
    while(c++!=n+1)
    {
        a[i][j++]=num++;
    }
    c=1;
    while(c++!=n+1)
    {
        a[i++][j]=num++;
    }
    c=1;
    while(c++!=n+1)
    {
        a[i][j--]=num++;
    }
    c=1;
    while(c++!=n+1)
    {
        a[i--][j]=num++;
    }
  i=k+1;n-=2;k++;
  j=i;
}
if(N%2!=0) a[k-1][k-1]=num;
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
{   if(j==N-1) cout<<a[i][j]<<endl;
    else cout<<a[i][j]<<"\t";}
}
cout<<endl;
 }
 }
return 0;
}
感悟:这道题目在求方阵各个数据的值是要注意理清逻辑,一行一列的求,多多实验,注意细节。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值