我想睡觉


私信TA

用户名:beiqian

访问量:4708

签 名:

等  级
排  名 1684
经  验 2707
参赛次数 0
文章发表 18
年  龄 0
在职情况 学生
学  校 武汉理工大学
专  业

  自我简介:

解题思路:

    将每个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 人评分

  评论区

  • «
  • »