打印数字菱形
题目:打印一个由数字 0∼n构成的菱形。
其中 n位于正中心,数字靠近边缘时逐个递减,直至为 0。
例如,当 n=5时,图形如下所示:
现在,给定 n,请你打印相应菱形。
输入格式 一个整数 n。
输出格式 输出相应菱形。
数据范围2≤n≤9
#include <stdio.h>
//打印题目优先使用二维数组
int main(){
int n;
scanf("%d",&n);
char arr[100][100]={0};
int i,j;
for(i=0;i<=n;++i){
for(j=0;j<2*n-2*i;++j){//前面的空格
arr[i][j]=' ';
}
for(int k=0;k<=i;++k){
arr[i][j]='0'+k;
arr[i][j+1]=' ';
j=j+2;
}
for(int k=i-1;k>=0;--k){
arr[i][j]='0'+k;
arr[i][j+1]=' ';
j=j+2;
}
}
for(i=n+1;i<=2*n;++i){
for(j=0;j<2*i-2*n;++j){
arr[i][j]=' ';
}
for(int k=0;k<=2*n-i;++k){
arr[i][j]='0'+k;
arr[i][j+1]=' ';
j=j+2;
}
for(int k=2*n-i-1;k>=0;--k){
arr[i][j]='0'+k;
arr[i][j+1]=' ';
j=j+2;
}
}
for(i=0;i<2*n+1;++i){
printf("%s\n",arr[i]);//直接按行打印
}
}
不使用二维数组直接打印
#include <stdio.h>
#include <string.h>
int main(){
int n;
scanf("%d",&n);
char str[1000];
//按行去打印
for(int i=0;i<=n;++i){
memset(str,0,1000);
int j;
for(j=0;j<2*n-2*i;++j){
str[j]=' ';
}
for(int k=0;k<=i;++k){
str[j]='0'+k;
str[j+1]=' ';
j=j+2;
}
for(int k=i-1;k>=0;--k){
str[j]='0'+k;
str[j+1]=' ';
j=j+2;
}
printf("%s\n",str);
}
for(int i=n+1;i<=2*n;++i){
int j;
memset(str,0,1000);
for(j=0;j<2*i-2*n;++j){
str[j]=' ';
}
for(int k=0;k<=2*n-i;++k){
str[j]='0'+k;
str[j+1]=' ';
j=j+2;
}
for(int k=2*n-i-1;k>=0;--k){
str[j]='0'+k;
str[j+1]=' ';
j=j+2;
}
printf("%s\n",str);
}
}