第六届CCF计算机职业资格认证考试题解(第三题)(画图)
2016-04-08 10:34
405 查看
之前在CSDN上看到别人的代码,跑了下,发现官方给的第一个测例是过不去的,但是提交上去之后是100分,猜测是判题系统中并没有使用题目中给的第一个测例。
另,之前自己写的代码是零分,后来发现是字符之间多输出了空格,以后还是要认真看题。
最后改了之后,是90分,后来经人指正,是没有考虑到划线时遇到'+'时的情况,不论是画'|'还是'-',遇到'+'时仍旧要保持'+'号.
原文:http://blog.csdn.net/jaster_wisdom/article/details/51059144
一下是修改之后的代码,可以跑过所有测例。
#include <stdio.h>
#include <stdlib.h>
int n,m,q;
int do1_x,do1_y;
char do1_c;
int do0_x1,do0_x2,do0_y1,do0_y2;
char flag[100][100];
int draw1(int x,int y,char c)
{
if(x < 0 || x >= n)
{
return 0;
}
if(y < 0 || y >= m)
{
return 0;
}
if(flag[x][y] == '+' || flag[x][y] == '-' || flag[x][y] == '|')
{
return 0;
}
else if(flag[x][y] == c)
{
return 0;
}
else
{
flag[x][y] = c;
draw1(x+1,y,c);
draw1(x-1,y,c);
draw1(x,y+1,c);
draw1(x,y-1,c);
}
return 0;
}
int draw0(int x1,int y1,int x2,int y2)
{
int t;
int i;
if(x1 == x2)
{
if(y1 > y2)
{
t = y2;
y2 = y1;
y1 = t;
}
for(i = y1;i <= y2; i++)
{
if(flag[x1][i] == '|')
{
flag[x1][i] = '+';
}
else if(flag[x1][i] == '+')
{
continue;
}
else
{
flag[x1][i] = '-';
}
}
}
else if(y1 == y2)
{
if(x1 > x2)
{
t = x2;
x2 = x1;
x1 = t;
}
for(i = x1;i <= x2;i++)
{
if(flag[i][y1] == '-')
{
flag[i][y1] = '+';
}
else if(flag[i][y1] == '+')
{
continue;
}
else
{
flag[i][y1] = '|';
}
}
}
else
{
printf("Error:x1 != x2 && y1 != y2\n");
}
return 0;
}
int initial()
{
int i,j;
for(i=0;i<100;i++)
{
for(j=0;j<100;j++)
{
flag[i][j] = '.';
}
}
return 0;
}
int read_draw()
{
int i;
int mark;
scanf("%d %d %d",&m,&n,&q);
for(i=0;i<q;i++)
{
scanf("%d",&mark);
if(mark == 1)
{
scanf("%d %d %c",&do1_y,&do1_x,&do1_c);
draw1(do1_x,do1_y,do1_c);
}
else
{
scanf("%d %d %d %d",&do0_y1,&do0_x1,&do0_y2,&do0_x2);
draw0(do0_x1,do0_y1,do0_x2,do0_y2);
}
}
return 0;
}
int pri()
{
int i,j;
for(i=n-1;i>=0;i--)
{
if(i != (n-1))
{
printf("\n");
}
for(j=0;j<m;j++)
{
printf("%c",flag[i][j]);
}
}
return 0;
}
int main()
{
initial();
read_draw();
pri();
return 0;
}
另,之前自己写的代码是零分,后来发现是字符之间多输出了空格,以后还是要认真看题。
最后改了之后,是90分,后来经人指正,是没有考虑到划线时遇到'+'时的情况,不论是画'|'还是'-',遇到'+'时仍旧要保持'+'号.
原文:http://blog.csdn.net/jaster_wisdom/article/details/51059144
一下是修改之后的代码,可以跑过所有测例。
#include <stdio.h>
#include <stdlib.h>
int n,m,q;
int do1_x,do1_y;
char do1_c;
int do0_x1,do0_x2,do0_y1,do0_y2;
char flag[100][100];
int draw1(int x,int y,char c)
{
if(x < 0 || x >= n)
{
return 0;
}
if(y < 0 || y >= m)
{
return 0;
}
if(flag[x][y] == '+' || flag[x][y] == '-' || flag[x][y] == '|')
{
return 0;
}
else if(flag[x][y] == c)
{
return 0;
}
else
{
flag[x][y] = c;
draw1(x+1,y,c);
draw1(x-1,y,c);
draw1(x,y+1,c);
draw1(x,y-1,c);
}
return 0;
}
int draw0(int x1,int y1,int x2,int y2)
{
int t;
int i;
if(x1 == x2)
{
if(y1 > y2)
{
t = y2;
y2 = y1;
y1 = t;
}
for(i = y1;i <= y2; i++)
{
if(flag[x1][i] == '|')
{
flag[x1][i] = '+';
}
else if(flag[x1][i] == '+')
{
continue;
}
else
{
flag[x1][i] = '-';
}
}
}
else if(y1 == y2)
{
if(x1 > x2)
{
t = x2;
x2 = x1;
x1 = t;
}
for(i = x1;i <= x2;i++)
{
if(flag[i][y1] == '-')
{
flag[i][y1] = '+';
}
else if(flag[i][y1] == '+')
{
continue;
}
else
{
flag[i][y1] = '|';
}
}
}
else
{
printf("Error:x1 != x2 && y1 != y2\n");
}
return 0;
}
int initial()
{
int i,j;
for(i=0;i<100;i++)
{
for(j=0;j<100;j++)
{
flag[i][j] = '.';
}
}
return 0;
}
int read_draw()
{
int i;
int mark;
scanf("%d %d %d",&m,&n,&q);
for(i=0;i<q;i++)
{
scanf("%d",&mark);
if(mark == 1)
{
scanf("%d %d %c",&do1_y,&do1_x,&do1_c);
draw1(do1_x,do1_y,do1_c);
}
else
{
scanf("%d %d %d %d",&do0_y1,&do0_x1,&do0_y2,&do0_x2);
draw0(do0_x1,do0_y1,do0_x2,do0_y2);
}
}
return 0;
}
int pri()
{
int i,j;
for(i=n-1;i>=0;i--)
{
if(i != (n-1))
{
printf("\n");
}
for(j=0;j<m;j++)
{
printf("%c",flag[i][j]);
}
}
return 0;
}
int main()
{
initial();
read_draw();
pri();
return 0;
}
相关文章推荐
- Java访问https接口实现
- Nginx 开启http目录下载
- Http的常见问题
- System.Net.WebException: The operation has timed out at System.Net.HttpWebRequest.GetResponse()
- TCP/IP协议栈 头部参数
- Linux iftop --网络流量监控
- Linux ifstat --网络接口检测工具
- Linux ifconfig --网络配置命令
- 网络字节序与主机字节序
- Java 通过httpClient Post方式提交xml,并从服务端返回数据
- HTTP响应头和请求头信息对照表
- Apache网络爬虫框架nutch安装教程
- linux网络基础
- 《网络工程师》 Part1 操作系统
- Http协议详解
- 非常好用的网络请求调试工具(chrome postman)
- http协议中:GET/POST/PUT/DELETE/INPUT/TRACE/OPTIONS/HEAD方法
- TCP协议和UDP协议的区别 (有无链接,传输速度,有序无序,可靠性,对资源的占用)
- DataSnap Server HTTP json格式修改 返回图片
- 非常简单的Python HTTP服务