解题思路:

参考样例输出,我们可将“DNA”拆分为两大部分分别打印。即:先打印第一行,再用b循环打印其余内容。

注意事项:

  1. 数据n,a,b的取值范围

  2. 第一行与每次b循环中最后一行的空格数与数据a之间的关系

  3. 中间的内容可利用一维数组以二维形式(即(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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论