蓝桥杯 打印十字图
2016-03-12 22:52
483 查看
问题描述
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:[code]..$$$$$$$$$$$$$.. ..$...........$.. $$$.$$$$$$$$$.$$$ $...$.......$...$ $.$$$.$$$$$.$$$.$ $.$...$...$...$.$ $.$.$$$.$.$$$.$.$ $.$.$...$...$.$.$ $.$.$.$$$$$.$.$.$ $.$.$...$...$.$.$ $.$.$$$.$.$$$.$.$ $.$...$...$...$.$ $.$$$.$$$$$.$$$.$ $...$.......$...$ $$$.$$$$$$$$$.$$$ ..$...........$.. ..$$$$$$$$$$$$$..
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
样例输入1
[code]1
样例输出1
[code]..$$$$$.. ..$...$.. $$$.$.$$$ $...$...$ $.$$$$$.$ $...$...$ $$$.$.$$$ ..$...$.. ..$$$$$..
样例输入2
[code]3
样例输出2
[code]..$$$$$$$$$$$$$.. ..$...........$.. $$$.$$$$$$$$$.$$$ $...$.......$...$ $.$$$.$$$$$.$$$.$ $.$...$...$...$.$ $.$.$$$.$.$$$.$.$ $.$.$...$...$.$.$ $.$.$.$$$$$.$.$.$ $.$.$...$...$.$.$ $.$.$$$.$.$$$.$.$ $.$...$...$...$.$ $.$$$.$$$$$.$$$.$ $...$.......$...$ $$$.$$$$$$$$$.$$$ ..$...........$.. ..$$$$$$$$$$$$$..
提示
请仔细观察样例,尤其要注意句点的数量和输出位置。分析
是时候祭出这张图了,再次原谅我拙劣的画图技能……代码
[code]#include <iostream> #include <vector> using namespace std; void printVector2(vector<vector<char> > res) { for (int i = 0; i < res.size(); i++) { for (int j = 0; j < res.size(); j++) cout << res[i][j]; cout << endl; } } void changeAtRow(int start, int end, int row, vector<vector<char> > &res) { for (int col = start; col <= end; col++) res[row][col] = '$'; } void changeAtCol(int start, int end, int col, vector<vector<char> > &res) { for (int row = start; row <= end; row++) res[row][col] = '$'; } void printFlag(int n) { int length = 1 + 4 * n + 2 * 2; vector<vector<char> > res(length, vector<char>(length, '.')); for (int i = n; i >= 0; i--) { int start = 2 * (n - i) + 2; int end = start + 1 + i * 4 - 1; int row = 2 * (n - i); int row2 = row + i * 4 + 4; changeAtRow(start, end, row, res); changeAtRow(start, end, row2, res); changeAtCol(row, row + 2, start, res); changeAtCol(row, row + 2, end, res); changeAtCol(row2 - 2, row2, start, res); changeAtCol(row2 - 2, row2, end, res); } for (int i = n; i >= 0; i--) { int start = 2 * (n - i) + 2; int end = start + 1 + i * 4 - 1; int col = 2 * (n - i); int col2 = col + i * 4 + 4; changeAtCol(start, end, col, res); changeAtCol(start, end, col + i * 4 + 4, res); changeAtRow(col, col + 2, start, res); changeAtRow(col, col + 2, end, res); changeAtRow(col2 - 2, col2, start, res); changeAtRow(col2 - 2, col2, end, res); } printVector2(res); } int main(int argc, char *argv[]) { int n; cin >> n; printFlag(n); return 0; }
相关文章推荐
- 支持向量机理论及工具LibSVM
- Java NIO: Non-blocking Server
- 前端学习总结(十一)Cordova(Phonegap)常用命令与基础
- Java基础练习
- 细说HTML<head>内标签之<meta>
- jquery插件-表单验证插件-提示信息中文化与定制提示信息
- hdu-5641 King's Phone (水题)
- mysql数据类型
- Hadoop伪分布式搭建过程详解
- BestCoder Round #75 King's Cake 模拟&&优化 || gcd
- 客户端检测技术
- 软件过程与项目管理(第三次作业)
- 用UIScrollView,UIPageControl来实现滚动视图。
- Java UDP 编程
- 单臂路由,捆绑链路
- Hadoop 学习相关资料
- Hadoop 学习相关资料
- Hadoop 学习相关资料
- Hadoop 学习相关资料
- Hadoop 学习相关资料