您的位置:首页 > 其它

蓝桥杯 打印十字图

2015-04-20 16:50 218 查看
左边图是输入3时的结果,右边是输入1时的结果,之前曾经想要不要用地递归,查了一下发现没有必要,把图形分成四块,每块又分成三个部分,开个字符数组赋值输出就可以了,很简单



#include<stdio.h>
#include<string.h>
int main(void){
char a[130][130];
int n, i, j, m;
int mid_of_row;
memset( a, '$', 16900 * sizeof(char));
//这里是一个投机取巧的办法,直接全都赋值成$,之后找'.'的位置就可以了,这也是我写完了以后才想到的
scanf("%d", &n);

mid_of_row = 5 + ( n - 1) * 2;//中线位置
for( j = 1; j <= 2 * n + 1 ; j++){
for( i = mid_of_row ; i > j + 1; i--){
if( j % 2 == 0){
// 上三角
a[j][i] = '.';
// 下三角
a[i][j] = '.';
}
}
}

// 中间
for( i = mid_of_row - 1; i >= 1; i--){
if( i == 1){
a[i][i] = '.';
}
else if( i % 2 == 0){
a[i][i] = a[i-1][i] = a[i][i-1] = '.';
}
}

for( i = 1; i <= mid_of_row; i++){
//左上
for( j = 1; j <= mid_of_row; j++){
printf("%c", a[i][j]);
}
//右上
for( j = mid_of_row - 1; j >= 1; j--){
printf("%c", a[i][j]);
}
printf("\n");
}
for( i = mid_of_row - 1; i >= 1; i--){
// 左下
for( j = 1; j <= mid_of_row; j++){
printf("%c", a[i][j]);
}
// 右下
for( j = mid_of_row - 1; j >= 1; j--){
printf("%c", a[i][j]);
}
printf("\n");
}
return 0;
}


这种字符形状输出的问题吧,我见过的通常不难,就是麻烦了点,打出来以后特别有成就感

===================================UPDATE===============================

貌似数组初始化成'.' 然后用这种方法赋值可能更简单


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: