题目的输入:

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


解题思路:

        观察到DNA的每一行都只有两个"X"(当然在中间位置的那个X,可以看成两个X的重合),每一行都有a个输出,再用两个变量来记录两个"X"的位置,每两行的"X"位置都是相差1的,这在程序上两个变量就是+1,-1的问题。用三层循环即可搞定。

注意事项:

参考代码:

#include"stdio.h"
void main()
{
     int n,a,b;
     int x,y,i;    //x用于记录每一行中左侧"X"的位置,x用于记录每一行中右侧"X"的位置

     scanf("%d",&n);
     while(n>0)    //第一层循环,输出相应组数的DNA
     {
      scanf("%d%d",&a,&b);    //记录DNA的信息
      x=1;y=a;                    //赋初值,第一行x=1,y=a;
      while(b>0)//第二层循环
          {
           for(i=1;i<=a;i++)        //第三层循环,输出DNA每一行的值

           if(i==x || i==y)printf("X");        //遍历i值,如果与想x,y值相等就输出“X”
           else printf(" ");        //否则输出空格
           printf("\n");
           if(y==1 || x==a){x=1;y=a;b--;}        //当x,y到极限值时,在赋初值,避免出界,并实现来回输出
           x++;y--;
          }
      n--;
      printf("\n");
     }
}


/*根据DNA的轴对称性可以不用y变量记录右边的位置*/


#include"stdio.h"
void main()
{
     int n,a,b;
     int x,i;
     scanf("%d",&n);
     while(n>0)
     {
      scanf("%d%d",&a,&b);
      x=1;
      while(b>0)
          {
           for(i=1;i<=a;i++)
           if(i==x || i==a-x+1)printf("X");//y=a-x+1

           else printf(" ");
           printf("\n");
           if(x==a){x=1;b--;}
           x++;
          }
      n--;
      printf("\n");
     }
}

点赞(2)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论