试题编号: | 201512-3 |
试题名称: | 画图 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 用 ASCII 字符来画图是一件有趣的事情,并形成了一门被称为 ASCII Art 的艺术。例如,下图是用 ASCII 字符画出来的 CSPRO 字样。 输入格式 第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坐标)。 |
#include<iostream>
using namespace std;
int m,n,q,flag;
char s[102][102];
int fill_c(int x,int y,char c){
if(x<0 || y<0 || x>=m || y>=m)return 0;
if(s[x][y]=='-' || s[x][y]=='|' || s[x][y]=='+' || s[x][y]==c)return 0;
s[x][y]=c;
fill_c(x+1,y,c);fill_c(x,y+1,c);
fill_c(x-1,y,c);fill_c(x,y-1,c);
}
int main(){
cin>>m>>n>>q;
int x,y,x1,y1,x2,y2;char c;
for(int i=0;i<m;i++){//在本题中,实际上画图的坐标与矩阵坐标规则恰好相反
for(int j=0;j<n;j++){
s[i][j]='.';
}
}
while(q--){
cin>>flag;
if(flag==0){//画线
cin>>x1>>y1>>x2>>y2;
if(x1==x2){
if(y1>y2){int t=y1;y1=y2;y2=t;}//保证y1<y2
for(int i=y1;i<=y2;i++){
if(s[x1][i]=='-' || s[x1][i]=='+')s[x1][i]='+';
else s[x1][i]='|';
}
}
if(y1==y2){
if(x1>x2){int t=x1;x1=x2;x2=t;}//保证x1<x2
for(int i=x1;i<=x2;i++){
if(s[i][y1]=='|' || s[i][y1]=='+')s[i][y1]='+';
else s[i][y1]='-';
}
}
}else{//填充
cin>>x>>y>>c;
fill_c(x,y,c);
}
}
for(int j=n-1;j>=0;j--){
for(int i=0;i<m;i++){
cout<<s[i][j];
}cout<<endl;
}
}
更多相关CCF的试题解答,请点击>>CCF历年认证考试解答