解题思路:
不难发现,看似复杂的DNA实际上是由第一个图形平移b-1次而成(b为重复度),再细化一下,整个DNA是由第一个图形中的所有‘x’(除了第一个图形左上和右上的‘x’,读者自行理解,不难理解)平移b-1次而成的,并且第一个图形中的任一‘x’与紧接着的图形中相同位置的‘x’相隔了a-1行(a的含义题目中已给出),和第n个图形中的相同位置的‘x’相隔了(n-1)*(a-1)行。
所以,我们只需要先确定第一个图形,剩下的图形可以利用第一个图形平移的原理即可。
注意事项:
参考代码:
#include <stdio.h>
#include <stdlib.h>
#define N 1000
int main()
{
int n;
int i,j;
int p;
int a[N],b[N];
int m;
char temp[N][N];
printf("Input n:\n");
scanf("%d",&n);
while(n<=0||n>15)
{
scanf("%d",&n);
}
printf("输入两个整数a,b(a为奇数且3<=a<=39。b表示重复度(1<=b<=20)):\n");
for(p=0;p<n;p++)
{
scanf("%d%d",&a[p],&b[p]);
while((a[p]%2==0)||(a[p]<3)||(a[p]>39)||(b[p]<1)||(b[p]>20))
{
printf("请重新输入合法数据:\n");
scanf("%d%d",&a[p],&b[p]);
}
}
for(p=0;p<n;p++)
{
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
temp[i][j]=' ';//先将数组全部初始化为空格
}
}
for(i=0;i<a[p];i++)
{
temp[i][i]='x';
temp[i][a[p]-i-1]='x';//确定第一个图形,‘x’在对角线上
}
for(m=1;m<=b[p];m++)//表示重复次数
{
for(i=1;i<a[p];i++)
{
for(j=0;j<a[p];j++)
{
if(temp[i][j]=='x')
{
temp[i+(a[p]-1)*m][j]='x';//利用平移原理,列数不变,行数相加,具体原理见解题思路
}
}
}
}
for(i=0;i<(a[p]*b[p]-b[p]+1);i++) // (a[p]*b[p]-b[p]+1) 为DNA总行数
{
for(j=0;j<a[p];j++)
{
printf("%c",temp[i][j]);
}
printf("\n");
}
printf("\n");
}
return 0;
}
0.0分
0 人评分
C语言训练-求具有abcd=(ab+cd)2性质的四位数 (C语言代码)浏览:1392 |
震宇大神的杀毒软件 (C语言代码)浏览:1348 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:1059 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:654 |
C语言训练-求素数问题 (C语言代码)浏览:773 |
【数组的距离】 (C语言代码)浏览:787 |
P1001 (C语言代码)浏览:836 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:584 |
简单的a+b (C语言代码)浏览:674 |
WU-拆分位数 (C++代码)浏览:819 |