题目的输入:
输入包含多组测试数据。第一个整数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语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复