原题链接:蓝桥杯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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复