解题思路:分板块打印,借助循环,调用函数
注意事项:格式及图形转换
参考代码:
#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 人评分