码迷,mamicode.com
首页 > 其他好文 > 详细

双转向旋转方阵递归设计

时间:2017-11-27 00:00:40      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:递增   递归函数   clu   ==   cpp   amp   printf   逆转   else   

#include <stdio.h>
int n,a[20][20]={0};
void main()
{ int h,v,b,p,s,d;
printf("  请选择方阵阶数n:");
scanf("%d",&n);
printf("  请选择转向,顺转1,逆转2:");
scanf("%d",&p);
b=1;s=n;d=1;
void t(int b,int s,int d);  // 递归函数说明  
t(b,s,d);
if(p==1)                    // 按要求输出旋转方阵  
   printf("   %d阶顺转方阵: \n",n);
else
   printf("   %d阶逆转方阵: \n",n);
for(h=1;h<=n;h++) 
  { for(v=1;v<=n;v++) 
	    if(p==1)
	       printf(" %3d",a[h][v]);
	    else 
       printf(" %3d",a[v][h]);
    printf("\n");
   }
return;
}
void t(int b,int s,int d)    // 定义递归函数  
{ int j,h=b,v=b;
if(s==0) return;             // s=0,1时为递归出口  
if(s==1) 
{ a[b][b]=d;return;}
for(j=1;j<s;j++)             // 一圈的上行从左至右递增    
{ a[h][v]=d;v++;d++;}
for(j=1;j<s;j++)             // 一圈的右列从上至下递增    
{ a[h][v]=d;h++;d++;}
for(j=1;j<s;j++)             // 一圈的下行从右至左递增    
{ a[h][v]=d;v--;d++;}
for(j=1;j<s;j++)             // 一圈的左行从下至上递增    
{ a[h][v]=d;h--;d++;}
t(b+1,s-2,d);                // 调用内圈递归函数  
}

  

双转向旋转方阵递归设计

标签:递增   递归函数   clu   ==   cpp   amp   printf   逆转   else   

原文地址:http://www.cnblogs.com/lls1350767625/p/7900884.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!