解题思路:
参考样例输出,我们可将“DNA”拆分为两大部分分别打印。即:先打印第一行,再用b循环打印其余内容。
注意事项:
数据n,a,b的取值范围
第一行与每次b循环中最后一行的空格数与数据a之间的关系
中间的内容可利用一维数组以二维形式(即(a-1)*(a-2))表示,先将所有元素赋值空格,再寻求对角线元素下标与数据a之间的关系(具体关系如代码所示),然后将其赋值'X'。最后用内外双层循环打印数组内容。笔者在这里只用了C/C++通用的字符数组形式,诸君也可以用C++独有的STL中vector容器或deque容器,笔者这里不再赘述。
参考代码:
#include<iostream>
using namespace std;
int main()
{
int n,a,b,i,j,k,p,q; //n,a,b为用户输入,其余均为循环变量
cin>>n;
if((n>15)||(n<1)) return 0; //限定n的取值范围
while(n--) //若n无其他用途,则直接 while(n--),否则for()循环代替之
{
cin>>a>>b;
if((a%2==0)||(a<3)||(a>39)||(b<1)||(b>20)) //限定a、b的取值范围
return 0;
cout<<"X";
for(i=0;i<a-2;i++)
cout<<" ";
cout<<"X";
cout<<endl; //打印第一行
for(i=0;i<b;i++) //b循环打印其余内容
{
int t=(a-2)*(a-1);
char ch[t];
for(j=0;j<t;j++)
ch[j]=' ';
for(j=1;j<t;j++)
{
if((j%(a-2)==0)||((j-1)%a==0))
ch[j]='X';
}
j=0;
for(p=0;p<a-2;p++)
{
for(q=0;q<a-1;q++,j++)
cout<<ch[j];
cout<<endl;
} //找规律,用字符一维数组以二维形式表示中间内容
cout<<"X";
for(k=0;k<a-2;k++)
cout<<" ";
cout<<"X";
cout<<endl; //打印最后一行
}
cout<<endl; //每组打印之间空一行
}
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复