解题思路:

    将每个DNA序列看作一个二维数组,每得到一个新的a就生成一个新的二维数组并且根据b重复输出。


注意事项:


  1. 生成二维数组之前先用memset(地址,初始符,数组大小)来初始化一维数组(每一行)。

  2. 格式容易手滑出问题,多调整几次就好了,末行不要有换行。


参考代码:

// 创建于 2021/9/17.
#include <stdio.h>
#include <stdlib.h> //提供malloc()函数
#include <string.h> //提供memset()函数
char **dna(int a){
    int i,l = 0,r = a-1;
    char **arr = (char **)malloc(a * sizeof(char *));//给二位数组中的"每行的指针"分配内存
    for(i = 0; i < a; i++) {
        arr[i] = (char *)malloc((a+1) * sizeof(char));//给每行分配内存
        memset(arr[i],' ',sizeof(arr[i]));//初始化二维数组为空格
        arr[i][l++] = 'X';
        arr[i][r--] = 'X';//用l和r两个指针来写入X
        arr[i][a] = '\0';
    }
    return arr;//返回二维数组的指针
}
void show(char **s,int start,int end){//打印出二维数组
    for(int i = start,flag = 0; i < end; ++i){
        if(flag)printf("\n");flag = 1;
            printf("%s",s[i]);
    }
}
int main(void) {
    int N, a, b, var[30], pos = 0;
    scanf("%d",&N);
    for (int i = 0; i < N; ++i) {
        scanf("%d %d",&var[pos],&var[pos+1]);//将a、b数据存入数组var,便于后续读取
        pos += 2;
    }
    pos = 0;
    for (int i = 0; i < N; ++i) {
        a = var[pos++];
        b = var[pos++];//读取变量a、b
        show(dna(a),0,1);//第一行不重复,故从0行打印到1行
        printf("\n");
        for (int j = 0; j < b; ++j) {
            show(dna(a),1,a);//把1行到a行重复打印b次
            if(j!=b-1)printf("\n");
        }
        if(i!=N-1)printf("\n\n");//这里几个\n是为了控制格式正确
    }
    return 0;
}


点赞(0)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论