飞羽


私信TA

用户名:cjun1998

访问量:15071

签 名:

coding

等  级
排  名 449
经  验 4804
参赛次数 6
文章发表 17
年  龄 0
在职情况 在职
学  校
专  业

  自我简介:

十八般武艺,样样不会

题目的输入:

输入包含多组测试数据。第一个整数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");
     }
}

 

0.0分

0 人评分

  评论区

  • «
  • »