过程看代码注释,但是没法太过详细,如果有不懂的欢迎提问,代码及运行效果如下
#include<iostream>
using namespace std;
char start=0x5B; //0x5A是大写字母'Z' ,这里相当于'Z'+1
//因为第二层中间的空格数量只有3个,往后都是每层增加4个空格,因此初始值设为-1
int spaceNum=-1;
int main(){
int in,i,j;
char end;
scanf("%d",&in); //输入整数n
if(in<2 || in>7){ //如果输入的n不在规定范围内,退出
printf("输入的数值有误\n");
return 0;
}
//处理上5层
for(i=0;i<in;++i){ //先做上5层的显示
j=0;
start--;
for(int n=0;n<(in-i)*2;n++){ //计算前面空格的数量
printf(" ");
}
printf("%c",start);
while(i>0 && j<1){
start--;
spaceNum+=4; //中间的空格每一层都增加4个,
for(int x=0;x<spaceNum;x++){ //计算中间空格的数量
printf(" ");
}
printf("%c",start);
j++;
}
printf("\n");
}
//处理下4层
end=start;
for(i=in-2;i>=0;--i){
j=0;
for(int n=0;n<(in-i)*2;n++){ //计算前面空格的数量
printf(" ");
}
printf("%c",end);
end--;
while(i>0 && j<1){
spaceNum-=4;
for(int x=0;x<spaceNum;x++){ //计算中间空格
printf(" ");
}
printf("%c",end);
end--;
j++;
}
printf("\n");
}
return 0;
}
供参考:
#include<stdio.h>
int main()
{
int i, j, n=5;
char ch = 'Z';
//scanf("%d", &n);
for (i = 0; i < n; i++)
{
for (j = i; j < n; j++)
printf(" ");
for (j = 0; j < 2 * i + 1; j++)
printf("%c ", (j == 0 || j == 2 * i) ? ch-- : ' ');
printf("\n");
}
ch++;
for (i = n - 2; i >= 0; i--)
{
for (j = i; j < n; j++)
printf(" ");
for (j = 0; j < 2 * i + 1; j++)
printf("%c ", (j == 0 || j == 2 * i) ? ch-- : ' ');
printf("\n");
}
return 0;
}
#include <stdio.h>
int main()
{
int i,j,k;
int n=5;
int m=0;
//scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(k=1;k<=n-i;k++)
printf(" ");
for(j=1;j<=i*2-1;j++)
{
if(j==1||j==i*2-1)
{
printf("%c",'Z'-m);
m++;
}
else if(j!=1&&j!=i*2-1){
printf(" ");
}else {
printf("%c",'Z'-m);
m++;
}
}
printf("\n");
}
m=0;
for(i=n-1;i>=1;i--)
{
for(k=1;k<=n-i;k++)
printf(" ");
for(j=1;j<=i*2-1;j++)
{
if(j==1||j==i*2-1)
{
printf("%c",'R'-m);
m++;
}
else if(j!=1&&j!=i*2-1){
printf(" ");
}else {
printf("%c",'R'-m);
m++;
}
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main(){
int x,y,w,h,n = 0;
char ch = 'Z';
scanf("%d", &n);
if(n < 2 || n > 7)return 1;
w = n * 4 - 1;
h = n * 2 - 1;
for (y = 0; y < h; y ++){
for (x = 0; x < w; x ++){
printf("%c", ( (x+2*y==h) || (x+2*y==3*h-2) || (x-2*y==h) || (x-2*y==2-h) )?ch--:' ');
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main(int argc , char *argv[])
{
int i = 0 ,j = 0;
int n = 5;
char ch = 'Z';
scanf("%d",&n);
for(i = 0; i < n; i++)//按行打印
{
if(i == 0)
printf(" ");//第一行多打印一个空格使字母剧中
for(j = i ; j < n; j++)//打印字母前面的空格,第一个 j=i=0; j<5,打印5空格
printf(" "); //第二行打印4个依次类推
printf("%c",ch--);//打印完空格打印第一个字母Z ,ch--,为下一个字母打印准备的
for(j = 0 ;j < i*2+1 ; j++)//打印两个字母中间的空格
printf(" "); //中间空格的个数是行数的两倍,+1为了居中
if(i != 0)//打印第二个字母,因为第一行只有一个字母,所以第一行不打印第二个字母
printf("%c",ch--);
printf("\n");//打印换行
}
ch++;//回退一个字母符合题意
for(i = n-2; i >= 0; i--)//打印下面部分,是从第二行开始打印,所以n-2
{
if(i == 0)//以下同理
printf(" ");
for(j = i ; j < n; j++)
printf(" ");
printf("%c",ch--);
for(j = 0 ;j < i*2+1 ; j++)
printf(" ");
if(i != 0)
printf("%c",ch--);
printf("\n");
}
}
在VC6的运行效果:
#include <stdlib.h>
int main()
{
int i,j,k,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(k=1;k<=n-i;k++)
printf(" ");
for(j=1;j<=i*2-1;j++)
{
if(j==1||j==i*2-1)
{
printf("A");
}
else printf(" ");
}
printf("\n");
}
for(i=n-1;i>=1;i--)
{
for(k=1;k<=n-i;k++)
printf(" ");
for(j=1;j<=i*2-1;j++)
{
if(j==1||j==i*2-1)
{
printf("B");
}
else printf(" ");
}
printf("\n");
}
return 0;
}