解题思路:
不难发现,看似复杂的DNA实际上是由第一个图形平移b-1次而成(b为重复度),再细化一下,整个DNA是由第一个图形中的所有‘x’(除了第一个图形左上和右上的‘x’,读者自行理解,不难理解)平移b-1次而成的,并且第一个图形中的任一‘x’与紧接着的图形中相同位置的‘x’相隔了a-1行(a的含义题目中已给出),和第n个图形中的相同位置的‘x’相隔了(n-1)*(a-1)行。
所以,我们只需要先确定第一个图形,剩下的图形可以利用第一个图形平移的原理即可。
注意事项:
参考代码:
#include
#include
#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
{
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
{
for(i=0;i
{
for(j=0;j
{
temp[i][j]=' ';//先将数组全部初始化为空格
}
}
for(i=0;i
{
temp[i][i]='x';
temp[i][a[p]-i-1]='x';//确定第一个图形,‘x’在对角线上
}
for(m=1;m<=b[p];m++)//表示重复次数
{
for(i=1;i