原题链接: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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复