原题链接:蓝桥杯2013年第四届真题-打印十字图
解题思路:具体看注释;
将图形分为三部分,开头,中间,还有主体,主体分为单双处理;
分别进行打印,
#include<stdio.h>
int n,len,a=1;
void title()//开头的两行,结尾的两行
{
for (int i = 0; i < 2; i++) {
for (int q = 1; q <= len; q++)
{
if (a % 2 == 0) (q == 3 || q == len - 2) ? printf("$") : printf(".");
else (q == 1 || q == 2 || q == len || q == len - 1) ? printf(".") : printf("$");
}
a++;
printf("\n");
} a = 2;//当第一次运行结束时,对title进行调换;
}
void center(int q)
{
int y = (q == 0 ? n : -1);//用于判断输出顺序,当q==0.顺序输出,反之~~~
int a = (q == 0 ? 1 : 2);//用于判断单双,当q从0开始时,先输出单再双,反之~~~
do {
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < len - 2 * (q + 1); j++)
{
if (a % 2 != 0)//单
{
if (j < q) printf("$.");
if (j == q||j== len - 3 * (q + 1)) printf("$$");
if (j > q && j < len - 2 * (q + 1) - q - 1) (j == q + 2 ||j== len - 3 * (q + 1)-2) ? printf(".") : printf("$");
if (j > len - 3 * (q + 1)) printf(".$");
}
else {
if (j <= q ) printf("$.");
if (j > q && j < len - 2 * (q + 1) - q - 1) (j == q + 3 || j == len - 3 * (q + 1) - 3)? printf("$") : printf(".");
if (j>=len - 3 * (q + 1)) printf(".$");
}
}
printf("\n");
a++;
}
y == n ? q++ : q--;
} while (q != y);
}
void main()
{
scanf("%d", &n);
len = 5 + 4 * n;
title();
center(0);
for (int q = 0; q < 2 * n + 1; q++)
if (q < n) printf("$.");
else if(q==n) printf("$$$$$");
else printf(".$");
printf("\n");
center(n-1);
title();
}打印主体部分有些难理解,要下点功夫!
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复