原题链接:DNA
解题思路:
将每个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语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复