hnnsx


私信TA

用户名:hnnsx

访问量:150

签 名:

等  级
排  名 22672
经  验 296
参赛次数 0
文章发表 3
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:

    1.这题和其他打印图形的题相差不多,没有什么算法,找到规律就好

        以3为例子:

        00    02

            11

        20    22

        除了i==j的情况(\反斜杠形状)需要打印X之外,/正斜杠方向需要分成两个部分(i<j和i>j),我试过用一个标识数a,不行(有更好解决方式的小伙伴可以下方留言)。标识数其实就是图形标量比如3(a=3-1,b=3)。

    2.只要打印出单次循环,就离成功不远了,单次循环:

int a=x[0]-1;//当二维数组i>j时的标识数,b相反
int b=x[0];
for(int i=0;i<x[0];i++) {
    for(int j=0;j<x[0];j++) {
        if(i==j) {
		System.out.print("X");
		a--;
		b--;
	}
	else if(i<j) {
	    if(j==b) {
		    System.out.print("X");
		}else System.out.print(" ");
	}
	else if(i>j) {
		if(j==a) {
		   System.out.print("X");
		}else System.out.print(" ");
        }
	else System.out.print(" ");
						
    }
	System.out.println();
}

注意事项:输出多个循环需要一些细节改动,需把循环标量改成n-1并补上最后一行。

参考代码:

    public static void main(String[] args) {
		//个数
		Scanner in=new Scanner(System.in);
		int num=in.nextInt();
		int count=num;
		//先整合数据,存入n1
		int[] n1=new int[num*2];
		num=num*2;
		int c=0;
		while(num>0) {
			if (in.hasNext()) {
				n1[c]=in.nextInt();
				c++;
			}else break;
			num--;
		}
		//使用二维数组存放数据,方便后面解题
		c=0;
		int[][] n=new int[count][2];
		for(int i=0;i<count;i++) {
			for(int j=0;j<2;j++) {
				n[i][j]=n1[c];
				c++;
			}
		}
		//打印输出,利用foreach循环遍历数据数组
		for (int[] is : n) {
			printDna(is);
			System.out.println();
		}
		
	}
	
	//解题函数
	public static void printDna(int[] x) {
		
		//当循环数为1的情况单独处理
		if(x[1]==1) {
			for(int m=0;m<x[1];m++) {
				int a=x[0]-1;//当二维数组i>j时的标识数,b相反
				int b=x[0];
				for(int i=0;i<x[0];i++) {
					for(int j=0;j<x[0];j++) {
						if(i==j) {
							System.out.print("X");
							a--;
							b--;
						}
						else if(i<j) {
							if(j==b) {
								System.out.print("X");
							}else System.out.print(" ");
						}
						else if(i>j) {
							if(j==a) {
								System.out.print("X");
							}else System.out.print(" ");
						}
						else System.out.print(" ");
						
					}
					System.out.println();
				}
			}
		}
		else {
			for(int m=0;m<x[1];m++) {
				int a=x[0]-1;//当二维数组i>j时的标识数,b相反
				int b=x[0];
				for(int i=0;i<x[0]-1;i++) {
					for(int j=0;j<x[0];j++) {
						if(i==j) {
							System.out.print("X");
							a--;
							b--;
						}
						else if(i<j) {
							if(j==b) {
								System.out.print("X");
							}else System.out.print(" ");
						}
						else if(i>j) {
							if(j==a) {
								System.out.print("X");
							}else System.out.print(" ");
						}
						else System.out.print(" ");
						
					}
					System.out.println();
				}
			}
			//补上最后一行
			for(int i=0;i<x[0];i++) {
				if(i==0||i==x[0]-1)System.out.print("X");
				else System.out.print(" ");
			}
			System.out.println();
		}
		
		
	}
	

都看到这了,留个赞吧 ^-^

 

0.0分

1 人评分

  评论区