ccf画图

来源:互联网 发布:追风打印软件 编辑:程序博客网 时间:2024/05/22 00:45

ccf画图这题,从题目来讲不难理解,实现的思路也很清晰

但是自己交上去的代码只有80分,怎么都想不通哪里出了问题

还有,在ccf上运行之后显示错误 或者运行错误,这两种有什么区别(用了下别人的代码是运行错误但是有90分,其中对于他的一些步骤我不是特别认可)

要注意的地方两个:

1、从外面输入数字作为坐标的时候,所给的x(也就是水平向右增大的那个数),实际对应的是数组里的列数

同理,外面所给数字y对应的是数组的行数,而且这里y是从下往上增大,我们的数组的行数是从上之下的编号依次为0、1、2.........

所以最后输出,应该从最后一行开始逆序输出

2、在对数组进行字母填充时,我最直接的想法是利用双重循环进行遍历,比如,第一层循环是纵向的(对数组而言),在第二层循环中进行横向遍历,遇到'|'或者‘+’就跳出第二层循环然后纵向+1,继续循环,但是这样会产生一个纵向循环直到遇到大边界否则无法终止的问题,所以后来看了别人的方法,不用循环,用嵌套,以一个点为原点四下散开,遇到了遮挡自然也就会停下来。

代码如下,欢迎大神指正

package CCF;import java.util.Scanner;public class Painting {public static char [][]cha;public static void main(String args[]){Scanner scan=new Scanner(System.in);int m=scan.nextInt();    //图形的宽int n=scan.nextInt();    //图形的高int q=scan.nextInt();    //操作个数int flag,max,min;char chara;cha=new char[n][m];for(int i=0;i<n;i++){for(int j=0;j<m;j++){cha[i][j]='.';}}/*for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(j!=n-1){System.out.print(cha[i][j]+" ");}else{System.out.print(cha[i][j]);System.out.println();}}}*/for(int k=0;k<q;k++){flag=scan.nextInt();//执行填充操作 数组总共有n行m列if(flag==1){int startx=scan.nextInt();   //数组的第几列int starty=scan.nextInt();   //数组的第几行chara=scan.next().charAt(0);//先遍历横坐标,再遍历纵坐标dfs(starty,startx,chara,n,m);}//执行画线段操作else{int startx1=scan.nextInt(); //普通坐标中的x,表示的是数组的第startx1列,因此在数组中它是一个纵坐标int starty1=scan.nextInt(); //普通坐标中的y,表示的是数组中的第n-1-starty1行,因此在数组中是一个横坐标int startx2=scan.nextInt();int starty2=scan.nextInt();//如果纵坐标相同,则添加的的是'-'if(starty1==starty2){max=startx1>startx2?startx1:startx2;min=startx1+startx2-max;for(int i=min;i<=max;i++){if(cha[starty1][i]=='|'){cha[starty1][i]='+';}else{cha[starty1][i]='-';}}}//如果横坐标相同,则添加的是'|'else{max=starty1>starty2?starty1:starty2;min=starty1+starty2-max;for(int j=min;j<=max;j++){if(cha[j][startx1]=='-'){cha[j][startx1]='+';}else{cha[j][startx1]='|';}}}}}//处理完所有的指令之后,将数组输出for(int i=n-1;i>=0;i--){for(int j=0;j<m;j++){System.out.print(cha[i][j]);}System.out.println();}}public static void dfs(int x,int y,char c,int hei,int wid){if (x >= 0&&x < hei && y < wid && y >= 0 && cha[x][y] != '+' && cha[x][y] != '|' && cha[x][y] != '-'&&cha[x][y] != c) {  cha[x][y] = c;              dfs(x + 1, y, c,hei,wid);              dfs(x - 1, y, c,hei,wid);              dfs(x, y + 1, c,hei,wid);              dfs(x, y - 1, c,hei,wid);          }  }}