yzrz


私信TA

用户名:1341916375

访问量:409

签 名:

等  级
排  名 30317
经  验 460
参赛次数 0
文章发表 2
年  龄 0
在职情况 学生
学  校 浙江师范大学
专  业

  自我简介:

水平不够,努力来凑!

TA的其他文章

DNA的生成问题
浏览:39

解题思路:

注意事项:

参考代码:

#include<stdio.h>

#include<string.h> 

#include<stdlib.h>

int mid1, mid2, flag1 = 0, flag2 = 0;

void findMid(char* c, int a) {//mid表示找到‘X’的位置,flag表示有没有找到

mid1 = mid2 = flag1 = flag2 = 0;

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

if (c[i] == 'X' && flag1 == 0) {

mid1 = i;

flag1 = 1;

}

else if (c[i] == 'X' && flag2 == 0) {

mid2 = i;

flag2 = 1;

}

if (flag1 == 1 && flag2 == 1)

break;

}

}

void initiate(char* c, int a) {//最开始的时候,先输出第一行,后面就可以连起来了

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

c[j] = ' ';

}

c[0] = c[a - 1] = 'X';

puts(c);

}


void back(char* c, int a) {//从变换完的DNA返回为一开始的

findMid(c, a);

if (flag1 == 1 && flag2 == 0) {

mid2 = mid1;

}

c[mid1-1] = 'X';

c[mid2+1] = 'X';

c[mid1] = ' ';

c[mid2] = ' ';

puts(c);

}

void change(char* c,int a) {//变换DNA

findMid(c, a);

if ((mid1+1)==mid2||(mid1+1)==(mid2-1)) {

c[mid1 + 1] = 'X';

c[mid1] = ' ';

c[mid2] = ' ';

}

else {

c[mid1 + 1] = 'X';

c[mid2 - 1] = 'X';

c[mid1] = ' ';

c[mid2] = ' ';

}

puts(c);

}

void createDNA(char* c, int a,int b) {//生成DNA

for (int k = 0; k < b; k++) {

int flag = 0;

for (int j = 0;; j++) {

if (flag == 0) {

change(c, a);

if (mid1 + 1 == mid2 || mid1 + 1 == mid2 - 1)flag = 1;

}

if (flag == 1) {

back(c, a);

if (mid1 == 1 || mid2 == a - 2)

break;

}

}

}

}

int main()

{

int n;

scanf("%d", &n);

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

int a, b;

scanf("%d%d", &a, &b);

if (a == 0 || b == 0)continue;

char* c = (char*)malloc(sizeof(char) * a);

initiate(c, a);

createDNA(c, a, b);

printf("\n");

}

return 0;

}


 

0.0分

1 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区