解题思路:分板块打印,借助循环,调用函数
注意事项:格式及图形转换
参考代码:
#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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复