图形问题的万金解决方法就是创建一个二维数组,然后将填数组,最后打印数组就行了。其本质还是找出图形的规律。
首先来找规律,先从外形上来找。
奇数高,看图形,是上下左右对称的。所以只找上半区的规律。
然后首行比其他行少两个字符也就是多两个空格,最外层都是A,数组可以提前都赋值。只需要管中间部分
从中间部分看,是A和B交错的,第0行是A,第1行B主导,第二行A主导,所以是偶数行A主导,奇数行B主导,所以数组可以提前赋值,将A和B都填进去,最后找规律将A和B在不同行插入相应的位置就好了。
偶数行插入B,奇数行插入A。
第一行插入0个A
第三行插入2个A(在 第2列和对称)
第五行插入4个A(在 2 、4)位置
因为奇偶规律一致,所以明显第X行,奇数行要插的位置是 2 ,4 。。。。X-1,然后对称
偶数行就是 1,3,。。。X-1,然后对称。
最后将上面的元素复制给下面输出就行。
#include <stdio.h>
int main ( ) {
char c[81][81] = {'\0'} ;
int n = 0 ;
char x , y ;
while ( rewind(stdin) , scanf("%d %c %c",&n,&x,&y ) != EOF ) {
for ( int i = 0 ; i < ( n + 1 ) / 2 ; i ++ ) {
for (int j = 0; j < n; j++) {
if (i % 2 == 0) {
c[i][j] = y ;
} else {
c[i][j] = x ;
if( j == 0 || j == n-1 ) {
c[i][j]=y ;
}
}
}
}
c[0][0]=' ' ;
c[0][n-1]=' ' ;
for (int j = 2 ; j <= ( n + 1 ) / 2 ; j += 2 ) {
for ( int i = 1 ; i <= j ; i += 2 ) {
c[j][i] = x ;
c[j][n-i] = x ;
}
}
for (int j = 3 ; j <= ( n + 1 ) / 2 ; j += 2 ) {
for ( int i = 2 ; i <= j ; i += 2 ) {
c[j][i] = y ;
c[j][n-i] = y ;
}
}
for( int i = 0 ; i < ( n + 1 ) / 2 ; i ++ ) {
for( int j = 0 ; j < n ; j ++ ) {
c[n - 1 - i][j] = c[i][j];
}
}
for( int i = 0 ; i <= n ; i ++ ) {
printf("%s\n", c[i] ) ;
}
}
return 0 ;
}
运行结果:
标签:规律,奇数,int,插入,算法,数组,经典,图形 From: https://www.cnblogs.com/llllmz/p/17942251