人生亦梦


私信TA

用户名:uq_55161405400

访问量:8862

签 名:

追寻强大且简洁的算法解疑,不会有难题,因而我为此痴迷

等  级
排  名 3060
经  验 2049
参赛次数 1
文章发表 25
年  龄 0
在职情况 学生
学  校
专  业 网络空间安全

  自我简介:

菜,并痴迷着; 爱,并奋斗着

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

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

参考代码:

#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 人评分

  评论区

  • «
  • »