原题链接:DNA
解题思路:
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分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复