解题思路:首先,我解释一下我定义的变量的含义。n代表组数,a代表一个单位的DNA串的行数,b代表重复度。从题目可知,这三个量分别有限制条件,n必须小于15且大于0(n代表组数,所以不可能为0),a为奇数且 3<=a<=39。b表示(1<=b<=20)。我设置的是:一旦用户输入错误,出现提示信息(错误),并重新开始执行程序,用户因此需要重新赋值。接下来就是最重要的内容了,我设置了4个循环,i代表组数的循环,j代表重复数的循环,k代表输出的DNA阵的行,q代表输出的DNA的列,然后由题可知,它输出X的所有的位置相当于一个a*a矩阵的主对角线和副对角线,所以根据求主对角线和副对角线的算法,直接输出对应的a*a矩阵的图形。要注意的是,重复数b一旦大于2,再次输出的矩阵少了一行(假如说b为2,第二次输出的图形的第一行和第一次输出的图形的最后一行是相等的,所以要想办法让它少输出一行,才能符合题意要求),因此,我设置了限制条件:
k=1;
if(j!=1) k=2;
最后就是要注意图形的格式,比如每组图形之间有一个空格什么的。
本人是一名来自二本院校学生,学计算机科学与技术专业的,现在是准大一,C语言刚刚学到了字符数组,所以我的解法或许也不是最好的,最简洁的。因此大家如果看到代码哪里有问题,还请指出,谢谢大家,让我们共同进步!
参考代码:
#include <stdio.h>
int main(){
int n,a[1000],b[1000],i,j,k,q;
abc:scanf("%d",&n);
if(n<=15 && n>0){
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
if(a[i]%2==0 || a[i]<3 || a[i]>39){
printf("出错!\n");
goto abc;
}
scanf("%d",&b[i]);
if(b[i]<1 || b[i]>20){
printf("出错!\n");
goto abc;
}
}
}
else{
printf("出错!\n");
goto abc;
}
for(i=1;i<=n;i++){
for(j=1;j<=b[i];j++){
k=1;
if(j!=1) k=2;
for(;k<=a[i];k++){
for(q=1;q<=5;q++){
if(k==q || k+q==a[i]+1){
printf("X");
}
else{
printf(" ");
}
}
printf("\n");
}
}
printf("\n");
}
return 0;
}
0.0分
2 人评分
【绝对值排序】 (C++代码)(利用两个库函数——abs()求绝对值 和 sort()快排)浏览:1518 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:767 |
2006年春浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:913 |
C语言训练-自由落体问题 (C语言代码)浏览:1775 |
蓝桥杯历届试题-九宫重排 (C++代码)浏览:2812 |
P1001 (C语言代码)浏览:836 |
1157题解浏览:769 |
幸运数 (C++代码)浏览:1309 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:1483 |
Quadratic Equation (C语言代码)浏览:1034 |