题目的输入:
输入包含多组测试数据。第一个整数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 人评分
点我有惊喜!你懂得!浏览:1564 |
C语言训练-尼科彻斯定理 (C语言代码)。。。内含证明定理浏览:2142 |
C语言训练-求PI* (C语言代码)浏览:930 |
点我有惊喜!你懂得!浏览:1392 |
C语言训练-求矩阵的两对角线上的元素之和 (C语言代码)浏览:3472 |
剔除相关数 (C语言代码)浏览:1058 |
Pascal三角 (C语言代码)浏览:1252 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:900 |
C语言训练-大、小写问题 (C语言代码)浏览:792 |
Hello, world! (C语言代码)浏览:766 |