savitar


私信TA

用户名:dotcpp0621044

访问量:298

签 名:

等  级
排  名 29030
经  验 525
参赛次数 0
文章发表 3
年  龄 0
在职情况 学生
学  校 湖南交通工程学院
专  业

  自我简介:

解题思路:1.第一步先思考如何输出一个DNA,我的想法是上下分两半,先输出上部分再输出下部分

2.输出一个完整DNA后,判断重复度,再输出重复的DNA

屏幕截图 2022-12-28 224743.png


注意事项:1.题目要求输入的数据都是一次性输入

2.输出的是X,不是x(这里我想了半天太难了)

参考代码:

#include<stdio.h>

main()

{

int i,j,count,n[100],a,e,k,t,b[100],l,y,p,z=0,x=0,q;

scanf("%d",&p);//输入组数

q=p;//将组数储存

    do

    {

        scanf("%d %d",&n[z++],&b[x++]);

        p--;

    }while(p>0);//输入的组数的次数

    z=0;

    x=0;

do

{

k=1;

e=n[z];

for(i=0;i<n[z]/2+1;i++)//首先是上半部分,算中间那一个X,上半部分的次数是n/2+1

{

j=i; 

for(;j>0;j--)

{

printf(" ");//输出空格,上半部分空格依次是0……n/2

}

printf("X");

if(i<n[z]/2)//当行数=n/2时,后面那个X不要

{

e=e-2;

a=e;

    for(;a>0;a--)//后面 X之前的空格依次是n-2,n-4……,1

    {

    printf(" ");

    }

    printf("X");

}

printf("\n");

}

t=n[z]/2;

t=--t;

for(i=0;i<n[z]/2;i++)//这里开始下半部分

{

j=t;//下半部分第一个X前的空格数量

for(;j>0;j--)

{

printf(" ");

}

printf("X");

a=k;//第二个X之前的空格

for(;a>0;a--)

{

printf(" ");

}

printf("X");

printf("\n");

k=k+2;//跟上面-2差不多

t--;

}

l=n[z];

k=1;

b[x]--;

while(b[x]>0)//这里开始输出重复DNA

{

k=1;//每次循环重置一下,保证空格数,其他同理

l=n[z];

for(i=0;i<n[z]/2+1;i++)

{

l=l-2;

a=l;

if(i==0)

continue;//因为重复的DNA我都看作没有第一行,所以跳过第一次,直接下一次循环

j=i; 

for(;j>0;j--)//还是上半部分

{

printf(" ");

}

printf("X");



if(i<n[z]/2)

{

    for(;a>0;a--)

    {

    printf(" ");

    }

    printf("X");

}

printf("\n");

}

y=n[z]/2;

y=--y;

for(i=0;i<n[z]/2;i++)//跟上面同理,下半部分

{

j=y;

for(;j>0;j--)

{

printf(" ");

}

printf("X");

a=k;

for(;a>0;a--)

{

printf(" ");

}

printf("X");

printf("\n");

k=k+2;

y--;

}

b[x]--;

    }

    z++;//下一循环就开始下一组数据

    x++;

if(z==q)//去掉最后一组后面的换行

break;

    printf("\n");

    }while(z<q);

}


 

0.0分

1 人评分

  评论区

  • «
  • »