CCF计算机软件能力认证 C++ 画图
问题描述 用 ASCII 字符来画图是一件有趣的事情,并形成了一门被称为 ASCII Art 的艺术。例如,下图是用 ASCII 字符画出来的 CSPRO 字样。 [code]..____.____..____..____...___.. ./.___/.___||.._.\|.._.\./._.\. |.|...\___.\|.|_).|.|_).|.|.|.| |.|___.___).|..__/|.._.<|.|_|.| .\____|____/|_|...|_|.\_\\___/.
输入格式 第1行有三个整数m, n和q。m和n分别表示画布的宽度和高度,以字符为单位。q表示画图操作的个数。 输出格式 输出有n行,每行m个字符,表示依次执行这q个操作后得到的画图结果。 样例输入 4 2 3 样例输出 AAAA 样例输入 16 13 9 样例输出 ................ 评测用例规模与约定 所有的评测用例满足:2 ≤ m, n ≤ 100,0 ≤ q ≤ 100,0 ≤ x < m(x表示输入数据中所有位置的x坐标),0 ≤ y < n(y表示输入数据中所有位置的y坐标)。 |
不能以“深度优先搜索”的形式填充字符,而是要“广度优先”并加以判断条件。
最开始只得了90分,参考网上代码,划线时候不仅会‘|’碰到‘-’、‘-’碰到‘|’,还会碰到‘+’。
考虑问题仍要全面。
[code]#include<iostream> #include<string> #include <cctype> #include <algorithm> #include <map> #include <set> #include <vector> #include <cmath> #include <queue> using namespace std; char num[105][105]; bool eq(int x,int y,char c) { if(num[x][y]==c||num[x][y]=='|'||num[x][y]=='-'||num[x][y]=='+') return false; else return true; } void f(int xr,int y,int m,int n,char c) { if(xr-1>=0&&eq(xr-1,y,c)) { num[xr-1][y]=c; f(xr-1,y,m,n,c); } if(xr+1<n&&eq(xr+1,y,c)) { num[xr+1][y]=c; f(xr+1,y,m,n,c); } if(y-1>=0&&eq(xr,y-1,c)) { num[xr][y-1]=c; f(xr,y-1,m,n,c); } if(y+1<m&&eq(xr,y+1,c)) { num[xr][y+1]=c; f(xr,y+1,m,n,c); } } int main() { int m,n,q; cin>>m>>n>>q; for(int i=0;i<n;++i) { for(int j=0;j<m;++j) num[i][j]='.'; } int flag,x,y,x1,y1,x2,y2; char c; for(int i=0;i<q;++i) { cin>>flag; if(flag) { cin>>x>>y>>c; y=n-y-1; num[y][x]=c; f(y,x,m,n,c); } else { cin>>x1>>y1>>x2>>y2; //cout<<x1<<" "<<x2<<endl; y1=n-y1-1; y2=n-y2-1; //cout<<x1<<" "<<x2<<endl; if(x1==x2) { for(int j=min(y1,y2);j<=max(y1,y2);++j) { if(num[j][x1]=='-'||num[j][x1]=='+') num[j][x1]='+'; else num[j][x1]='|'; } } else { for(int j=min(x1,x2);j<=max(x1,x2);++j) { if(num[y1][j]=='|'||num[y1][j]=='+') num[y1][j]='+'; else num[y1][j]='-'; } } } } for(int i=0;i<n;++i) { for(int j=0;j<m;++j) cout<<num[i][j]; cout<<endl; } return 0; }
阅读更多
- CCF计算机软件能力认证 C++ Markdown
- CCF计算机软件能力认证 C++ 俄罗斯方块
- CCF计算机软件能力认证 C++ 路径解析
- CCF计算机软件能力认证 C++ 权限查询
- CCF计算机软件能力认证 C++ 炉石传说
- 201604-1折点计数——CCF计算机软件能力认证试题历届真题
- CCF计算机软件能力认证试题练习201312-2-ISBN号码
- 第三次CCF计算机软件能力认证考试题解(Java)--201412--Z字形扫描--100分通过
- 2015年3月CCF计算机软件能力认证题:数字排序
- 201709-1打酱油——CCF计算机软件能力认证试题历届真题
- 201512-1数位之和——CCF计算机软件能力认证试题历届真题
- CCF计算机软件能力认证考试-201412-1-门禁系统
- CCF计算机软件能力认证试题练习-相邻数对(Java参考答案学习记录)
- CCF计算机软件能力认证模拟试题(c/c++)
- 201712-1最小差值——CCF计算机软件能力认证试题历届真题
- CCF计算机软件能力认证模拟试题(c/c++)
- 2015年3月CCF计算机软件能力认证题:图像旋转
- 第六次CCF计算机软件能力认证考试题解(Java)--201512--数位之和--100分通过
- 第三次CCF计算机软件能力认证题目:Z字形扫描等(Java)
- CCF计算机软件能力认证考试-201412-2-Z字形扫描