题目的输入:
输入包含多组测试数据。第一个整数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 人评分
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:689 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:574 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:544 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:891 |
这可能是一个假的冒泡法浏览:985 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:375 |
C语言训练-求1+2!+3!+...+N!的和 (C语言代码)浏览:786 |
众数问题 (C语言代码)浏览:823 |
Hello, world! (C++代码)浏览:1744 |
K-进制数 (C语言描述,蓝桥杯)浏览:925 |