【题目描述】
编写程序打印如下菱形图形(1≤n≤99),菱形由nn个整数组成,图形从第n行的第1列开始,数字分别是nn,nn-1,……2,1,并且逆时针向中间转入,如果1个数据项宽度不足nn的值宽度,用0补足。提醒:图案中没有数字的地方用空格填满,每行最后一个数字后面没有多余的空格。
例如n=7,输出:
【输入】
输入文件rotation.in包含1个整数n。
【输出】
输出文件rotation.out是一个菱形图形,图形从第n行的第1列开始,数字分别是nn,nn-1,……2,1,并且逆时针向中间转入
【限制】
1≤n≤99
【提示】
m=4
i=15;
printf("%0d", m, i); //这里用表示系数待定,m即为指定的宽度
//上面语句输出“0015”,数据宽度为4,不足4位,前补0
printf("%*c", m, ‘ ‘); //左边语句输出“ ”,即输出4个空格
#include "stdio.h"
const int N0=2*100-1+10;
int a[N0][N0]={ 0 };
struct node
{ int row, col;
}dir[4]={ {1, 1}, {-1, 1},{-1, -1},{1, -1}};//记录方位
int main()
{ int x, y, x1, y1, k; //一些变量
int n,i,j, d=0;
int row,col,row1,col1,m=0,c;
freopen("rotation.in", "r", stdin);
freopen("rotation.out", "w", stdout);
scanf("%d", &n); // n*n的菱形 假设为7
//*********************************
row=n;
col=1; //7
d=0;
int t=n*n; //49
while(t!=0){
m++; //判断最大是几个数 为2
t/=10;
}
for(i=n*n;i>=1;i--){ //输入所有方位的值
a[row][col]=i; //a[7][7] = 1
row1=row+dir[d].row; //2
col1=col+dir[d].col; // 8
if(row1<1 || col1<1 || row1>2*n-1 || col1>2*n-1 || a[row1][col1]!=0){ //这个是用来判断超界
d=(d+1)%4;
row1=row+dir[d].row;
col1=col+dir[d].col;
}
row=row1; //2
col=col1; //8
}
for(i=1;i<=2*n-1;i++){
for(j=1;j<=2*n-1;j++)
if(a[i][j]!=0) //按照方位输入数字
printf("%0*d",m,a[i][j]);
else
if( (i<=n && j<n+i )|| (i>n && j<3*n-i)) //输入空格
printf("%*c", m,' ');
printf("\n");
}
//=================================
return 0;
}