原题链接: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(); } } }
效果
0.0分
8 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
写复杂了,可以删除32 - 39 行,在之前循环 写入if(不是第一组 && 是第一行) continue; 就行