软比特的贝尔


私信TA

用户名:JacksonJiang

访问量:5283

签 名:

等  级
排  名 18144
经  验 754
参赛次数 0
文章发表 11
年  龄 0
在职情况 学生
学  校 重庆邮电大学
专  业

  自我简介:

解题思路:

       不难发现,看似复杂的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 人评分

  评论区

  • «
  • »