//解法一:直接打印法(特别麻烦的)
#include <stdio.h>
// int main() {
// char ch = 'w';
// scanf("%c\n",&ch);
// for(int i = 0;i<6;i++)
// {
// switch(i)
// {
// case 1:
// printf(" ");
// printf(" ");
// printf("%c\n",ch);break;
// case 2:
// printf(" ");
// for(int j = 0;j<3;j++)
// {printf("%c",ch);}
// printf("\n");break;
// case 3:
// for(int j = 0;j<5;j++)
// {printf("%c",ch);}
// printf("\n");break;
// case 4:
// printf(" ");
// for(int j = 0;j<3;j++)
// {printf("%c",ch);}
// printf("\n");break;
// case 5:
// printf(" ");
// printf(" ");
// printf("%c\n",ch);break;
// default:break;
// }
// }
// return 0;
// }
// //解法二:菱形拆分成三角形法(通法)
// #include<stdio.h>
// int main()
// {
// //取字符
// char ch = ' ';
// scanf("%c\n", &ch);
// int n = 5;//总行数,行数都为奇数
// int i = 1;//第几行数
// int j = 0;//计个数
// //总循环
// for (i; i <= n; i++)
// {
// if (i < (n - 1) / 2 + 1)//上三角形部分
// {
// for (j; j<(n- (1 + (2 * (i - 1))))/2; j++)//打印空格,上三角行第i行的空格个数/2
// {
// printf(" ");
// }
// j = 0;
// for (j; j<(1+(2*(i-1))); j++)//打印字符,上三角第i行的字符个数
// {
// printf("%c", ch);
// }
// j = 0;
// }
// if (i == (n - 1) / 2 + 1)//对称中线部分
// {
// for (j; j < n; j++)//此时与字符数相等n=(1+(2*(i-1)))
// {
// printf("%c", ch);
// }
// j = 0;
// }
// if(i > (n - 1) / 2 + 1)//下三角形部分
// {
// for (j; j < (1 + (2 * (i - 1))-n)/2; j++)//打印空格,下三角行第i行的空格个数/2,与上三角相反
// {
// printf(" ");
// }
// j = 0;
// for (j; j < (n - (1 + (2 * (i - 1)) - n)); j++)//打印字符,下三角第i行的字符个数,等于总数n-空格数
// {
// printf("%c", ch);
// }
// j = 0;
// }
// printf("\n");//第i行打印完后换行
// }
// return 0;
// }
//解法三:数组替换法(通法))
#include<stdio.h>
#define N 5 //总行数总是奇数
int main()
{
//第一部分:先把空格数组创建出来
char ch = ' ';//先放空格
char arr[N + 1] = { "" };//用于存放空格
int a = 0;//判断用
while (a < N)//存空格进数组里
{
arr[a] = ch;
a++;
if (a == N)
arr[N] = '\0';//存放打印结束符
}
scanf("%c\n", &ch);//取字符,把空格字符ch替换掉
//第二部分:设计打印菱形
//打印正三角:从空格数组中间向两旁替换字符,直到替换满
int i = 1;//行数
int mid = (N - 1) / 2;//中线
for (i; i <= (N + 1) / 2; i++)
{
arr[mid-(i-1)] = ch;//把字符放进空格数组
arr[mid+(i-1)] = ch;//同上
printf("%s\n", arr);
}
//打印倒三角:从字符数组两旁向中间替换空格
ch = ' ';//再次放入空格
int left = 0;
int right = N - 1;
for (i; i <= N; i++)
{
arr[left + (i - mid-2)] = ch;
arr[right - (i - mid-2)] = ch;
printf("%s\n", arr);
}
return 0;
}