易奔二


私信TA

用户名:ybl

访问量:961

签 名:

我还有两根头发

等  级
排  名 28514
经  验 485
参赛次数 0
文章发表 2
年  龄 19
在职情况 学生
学  校 长春理工大学
专  业 机械电子工程

  自我简介:

没学好JAVA的机械工科生不是好的C#程序员。 C#是世界上最好的语言

TA的其他文章

   题中输入:输入包含多组测试数据。第一个整数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分

8 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区

写复杂了,可以删除32 - 39 行,在之前循环 写入if(不是第一组 && 是第一行) continue; 就行
2024-02-06 13:37:20
  • «
  • 1
  • »