解题思路:分板块打印,借助循环,调用函数

注意事项:格式及图形转换

参考代码:

#include<stdio.h>


void picture(int, int);//打印DNA模型


int main()

{

int n;             //n组

int arr[100][2];   //每组对应的长度


scanf("%d", &n);

for (int i = 0; i < n; i++)

{

scanf("%d %d", &arr[i][0], &arr[i][1]);

}

/*打印DNA图形*/

for (int i = 0; i < n; i++) {


picture(arr[i][0], arr[i][1]);

//保证空格,格式正确

if (i != n - 1 && arr[i][1] % 2 != 1)

printf("\n\n");

else

if (i != n - 1 && arr[i][1] % 2 == 1)

printf("\n");

}


return 0;

}

void picture(int a, int b)

{

int point1 = 0;      //point1,point2的作用是找到X的位置

int point2 = a - 1;

int change1 = a;  //打印中可能出现长度变短,交替循环,达到改变长度,而又不改变a值的作用

int change = 0;  //奇数交替打印a长度与a-1长度

   //的DNA链

for (int k = 0; k < b; k++)             //控制每组的螺旋数

{

for (int i = 0; i < change1; i++)

{

for (int j = 0; j < a; j++)     //控制每行的打印

{

if (j == point1 || j == point2)

printf("X");

else

printf(" ");


}

printf("\n");

point1++;            //数据更新,X的位置改变

point2--;

}



if (change == 0 && b > 1)      //若环数大于1,长度变短,交替循环,达到改变长度

{

change1 -= 2;

change = 1;

point1 = 1;

point2 = a - 2;

}

else

{

change1 += 2;

change = 0;

point1 = 0;

point2 = a - 1;

}


}

if (b > 1 && b % 2 == 0)       //若环数为奇数,还需在末尾打印最后一次

{

for (int j = 0; j < a; j++)

{

if (j == 0 || j == a - 1)

printf("X");

else

printf(" ");

}

}

}


点赞(0)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论