题目描述
输入正整数N(N≤9)按照回形输出整数1~N2
输入
输出
样例输入
3
样例输出
1 2 3
8 9 4
7 6 5
提示
按照题目要求,数组中的最大值是81,因此按照%3d格式输出每个元素的值即可
#include <stdio.h>
#include "stdlib.h"
int main(int argc,char *argv[]){
int n,m,i,t,x,*q,**p;
printf("Input n(int 1~9)...\nn=");
if(scanf("%d",&n)!=1 || n<1 || n>9){
printf("Input error, redo: ");
return 0;
}
q=(int *)malloc(sizeof(int)*n*n);
if(q==NULL || (p=(int **)malloc(sizeof(int *)*n))==NULL){
printf("Application memory failure...\n");
return 0;
}
for(t=i=0;i<n;p[i++]=q+t,t+=n);
for(m=n>>1,t=x=1;t<=m;t++){
for(i=t-1;i<n-t;i++)
p[t-1][i]=x++;
for(i=t-1;i<n-t;i++)
p[i][n-t]=x++;
for(i=n-t;i>=t;i--)
p[n-t][i]=x++;
for(i=n-t;i>=t;i--)
p[i][t-1]=x++;
}
if(n&1)
p[t=n>>1][t]=x;
for(i=0;i<n;i++)
for(t=0;t<n;printf(t<n-1 ? "%3d" : "%3d\n",p[i][t++]));
free(q);
free(p);
return 0;
}
#include "stdlib.h"
int main(int argc,char *argv[]){
int n,m,i,t,x,*q,**p;
printf("Input n(int 1~9)...\nn=");
if(scanf("%d",&n)!=1 || n<1 || n>9){
printf("Input error, redo: ");
return 0;
}
q=(int *)malloc(sizeof(int)*n*n);
if(q==NULL || (p=(int **)malloc(sizeof(int *)*n))==NULL){
printf("Application memory failure...\n");
return 0;
}
for(t=i=0;i<n;p[i++]=q+t,t+=n);
for(m=n>>1,t=x=1;t<=m;t++){
for(i=t-1;i<n-t;i++)
p[t-1][i]=x++;
for(i=t-1;i<n-t;i++)
p[i][n-t]=x++;
for(i=n-t;i>=t;i--)
p[n-t][i]=x++;
for(i=n-t;i>=t;i--)
p[i][t-1]=x++;
}
if(n&1)
p[t=n>>1][t]=x;
for(i=0;i<n;i++)
for(t=0;t<n;printf(t<n-1 ? "%3d" : "%3d\n",p[i][t++]));
free(q);
free(p);
return 0;
}
温馨提示:答案为网友推荐,仅供参考