DNA
题目描述:
小强从小就喜欢生命科学,他总是好奇花草鸟兽从哪里来的。终于, 小强上中学了,接触到了神圣的名词--DNA.它有一个双螺旋的结构。这让一根筋的小强抓破头皮,“要是能画出来就好了” 小强喊道。现在就请你帮助他吧。
输入:
输入包含多组测试数据。第一个整数N(N<=15),N表示组数,每组数据包含两个整数a,b。a表示一个单位的DNA串的行数,a为奇数且 3<=a<=39。b表示重复度(1<=b<=20)。
输出:
输出DNA的形状,每组输出间有一空行。
样例输入:
2
3 1
5 4
样例输出:
X X
X
X X
X X
X X
X
X X
X X
X X
X
X X
X X
X X
X
X X
X X
X X
X
X X
X X
分析:
这道题,如果我们用循环来控制DNA图形的输出,循环条件不太好控制。因此,这题可以考虑用递归来做。至于X和空白的地方,都可以存到一个二维数组里。下面来看代码:
1 #include <stdio.h>
2 #define N 100
3 char ch[N][N];
4 int main(void)
5 {
6 void reDraw(int a,int b);
7 int n,i,j,k=1;
8 int a,b;
9 scanf("%d",&n);
10 while(n--){
11 scanf("%d %d",&a,&b);
12 for(j = 1;j <= a;j++){ //先打印第一行,剩下的全部用递归来完成
13 if(j == 1 || j == a){
14 ch[1][j] = 'X';
15 }
16 else{
17 ch[1][j] = ' ';
18 }
19 }
20 for(j = 1;j <= a;j++){
21 printf("%c",ch[1][j]);
22 }
23 printf("\n"); //这里记得打印换行符
24 reDraw(a,b);
25 printf("\n"); //题目要求:每组输出间有一空行
26 }
27 return 0;
28 }
29
30 void reDraw(int a,int b)
31 {
32 if(b-- > 0){ //设置递归次数,即重复次数
33 int i,j;
34 for(i = 2;i <= a;i++){
35 for(j = 1;j <= a;j++){
36 if(i==j || i+j==a+1){
37 ch[i][j] = 'X';
38 }
39 else{
40 ch[i][j] = ' ';
41 }
42 }
43 }
44 for(i = 2;i <= a;i++){
45 for(j = 1;j <= a;j++){
46 printf("%c",ch[i][j]);
47 }
48 printf("\n");
49 }
50 reDraw(a,b);
51 }
52 }
运行效果:


浙公网安备 33010602011771号