原题链接:DNA
题中输入:输入包含多组测试数据。第一个整数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();
}
}
}效果
![1613989807562371.png R1N~43_`D{TQ167K3$%N5]N.png](/assets/addons/ueditor/php/upload/image/20210222/1613989807562371.png)
0.0分
8 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复