您的位置:首页 > 理论基础

第六届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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: