题中输入:输入包含多组测试数据。第一个整数N(N<=15),N表示组数,每组数据包含两个整数a,b。a表示一个单位的DNA串的行数,a为奇数且 3<=a<=39。b表示重复度(1<=b<=20)。

    由此,我们可首先解决画一个“X”(注意,X为大写!)的问题,根据输出案例我们可以知道

X0X

0X0

X0X

X000X

0X0X0

00X00

0X0X0

X000X(0为空)


由此可知,这是一个二维数组c[a][a]且当二维数组行数等于列数,或行数等于总行数a-当前列数-1时,输出X,如果不是,输出空格。

实现部分代码如下:

for (int m = 0; m < num; m++) {  //num为输入的总行数
   for (int n = 0; n < num; n++) {
       if (m == n || m == num - n - 1)
           a[m][n] = "X";   //当行m等于列n,或行数等于总行数a-当前列数-1时,录入X
       else if(m>n || m<t[g][0]-n-1)
           a[m][n] = " ";  //在第一个X之前与每行两个X之间输入空格
       else
           a[m][n] = "e";//第二个X之后,录入e
   }
}

录入后,再进行代码的输出

for (int m = 0; m < num; m++) {
   for (int n = 0; n < num; n++)
       if(a[m][n]!="e")   //把二维数组内为e的都排除,就得到我们想要的答案了
           System.out.print(a[m][n]); 
   System.out.println(); //换行
}

之后再在外面嵌套关于重复度和组数的for循环,就可以完全实现代码中的输入输出功能啦


具体代码如下(可自由发挥):


import java.util.Scanner;

public class ContestUsing {
   public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);
       int group = scanner.nextInt();  //输入组别
       int t[][] = new int[group][2];   //对每组通过二维数组分类(可以不用这么麻烦,但这样最完美符合输入输出)
       for (int g=0;g<group;g++) {
           t[g][0] = scanner.nextInt();  //录入t[g][0]为行数
           t[g][1] = scanner.nextInt();  //录入t[g][1]为重复度
       }
       for (int g = 0;g<group;g++) {
           char[][] a = new char[t[g][0]][t[g][0]];  //定义大小为总行数x总行数的二维数组
           for (int m = 0; m < t[g][0]; m++) {
               for (int n = 0; n < t[g][0]; n++) {
                   if (m == n || m == t[g][0] - n - 1)
                       a[m][n] = 'X';   //当行m等于列n,或行数等于总行数a-当前列数-1时,录入X
                   else if(m>n || m<t[g][0]-n-1)
                       a[m][n] = ' ';  //在第一个X之前与每行两个X之间输入空格
                   else
                       a[m][n] = 'e';  //第二个X之后,录入e
               }
           }
           for (int i = 0; i < t[g][1]; i++) { //输出DNA
               if (i == 0) { //第一遍时,需要输出DNA的第一行
                   for (int m = 0; m < t[g][0]; m++) {
                       for (int n = 0; n < t[g][0]; n++)
                           if(a[m][n]!='e')   //把二维数组内为e的都排除不输出,就得到我们想要的答案了
                               System.out.print(a[m][n]);
                       System.out.println();
                   }
               } else {    //到了第二遍重复,不能输入DNA第一行,故从第二行开始,其他不变
                   for (int m = 1; m < t[g][0]; m++) {
                       for (int n = 0; n < t[g][0]; n++)
                           if(a[m][n]!='e')
                               System.out.print(a[m][n]);
                       System.out.println();  //换行
                   }
               }

           }
           System.out.println();
       }
   }

}

效果

  R1N~43_`D{TQ167K3$%N5]N.png

                                                                                                 

点赞(0)
 

0.0分

8 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

董丕通 10月前 回复TA

写复杂了,可以删除32 - 39 行,在之前循环 写入if(不是第一组 && 是第一行) continue; 就行