解题思路:
将每个DNA序列看作一个二维数组,每得到一个新的a就生成一个新的二维数组并且根据b重复输出。
注意事项:
生成二维数组之前先用memset(地址,初始符,数组大小)来初始化一维数组(每一行)。
格式容易手滑出问题,多调整几次就好了,末行不要有换行。
参考代码:
// 创建于 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 人评分
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:549 |
人见人爱A+B (C语言代码)浏览:663 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:790 |
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:2098 |
WU-格式化数据输出 (C语言代码)浏览:1818 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:570 |
C语言训练-数字母 (C语言代码)浏览:648 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:592 |
1118(求助_已解决)浏览:351 |
GC的苦恼 (C语言代码)浏览:672 |