• 第六届CCF计算机职业资格认证考试题解(第三题)(画图)


    之前在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 ");
    }
    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(" ");
    }
    for(j=0;j<m;j++)
    {
    printf("%c",flag[i][j]);
    }
    }
    return 0;
    }

    int main()
    {
    initial();
    read_draw();
    pri();
    return 0;
    }

  • 相关阅读:
    $NOIP2018$赛道修建
    $NOIP2005$过河
    $NOIP2014$飞扬的小鸟
    $[SCOI2014]$方伯伯的玉米田
    大吉大利,晚上吃鸡!
    $HNOI2005$星际贸易
    $CF1142B$ $Lynyrd Skynyrd$
    $SDOI2015$排序
    $NOIP2003$侦探推理
    Build 2016概览
  • 原文地址:https://www.cnblogs.com/vipwtl/p/5366992.html
Copyright © 2020-2023  润新知