zoukankan      html  css  js  c++  java
  • C语言官网蓝桥杯训练1115DNA

    这道题是比较简单的输出字符图形的题,但是有几个坑还是要注意下。

    1.题中所述的X是大写的,不要看成小写了。(我就错了好几次)

    2.每一行输出最后的X后不能在输出空格。

    3.输出两个DNA中间有一个空行。

    解题思路:

    只需要求出一个图形X的排列即可,后边直接重复输出,定义一个数组用来存放X,

    注意观察图形,我们们可以知道,X所处的位置有两个情况

    1.行列数相同

    2.所处行数和列数相加等于总行数加一。

    下边是代码:

    #include<stdio.h>
    int main()
    {
     int N;
     scanf("%d",&N);//总的测试实例
     while(N--)
     {
      int a,b,i,j,l;
      scanf("%d %d",&a,&b);
      char c[40][40];//定义字符串。
      for(i=1;i<=a;i++)//a代表行列数,b代表重复次数
      for(j=1;j<=a;j++)
      {
       if(i==j||i+j==a+1)//给字符串赋值 根据排列图中排列的规律
       c[i][j]='X';
       else
       c[i][j]=' ';
      }
      for(i=1;i<=a;i++)//首先输出第一个完整的X排列
      {
            int flag=0;//用标志符号控制是否输出每一行的最后一个X,注意有一行只有一个X
      for(j=1;j<=a;j++)
      {
      if(c[i][j]=='X')
      {
      printf("%c",c[i][j]);
      flag++;
      if(i!=(a+1)/2&&flag==2)//输出最后X后要退出,
      break;
      if(i==(a+1)/2&&flag==1)
      break;
      }
      else
      printf(" ");
         }
      printf(" ");
         }
         for(l=2;l<=b;l++)//下边的输出为数组去掉第一行。
      {
      for(i=2;i<=a;i++)
      {
      int flag=0;
      for(j=1;j<=a;j++)
      {
      if(c[i][j]=='X')
      {
      printf("%c",c[i][j]);
      flag++;
      if(i!=(a+1)/2&&flag==2)
      break;
      if(i==(a+1)/2&&flag==1)
      break;
      }
      else
      printf(" ");
         }
      printf(" ");
      }
         }
      printf(" ");//最后输出结束后输出空行。
     }
     return 0;
    }

  • 相关阅读:
    poj 2337 欧拉回路输出最小字典序路径 ***
    hdu 4831
    hdu 4832 dp ***
    hdu 4833 离散化+dp ****
    hdu 4006 优先队列 2011大连赛区网络赛F **
    hdu 4005 双联通 2011大连赛区网络赛E *****
    hdu 4004 二分 2011大连赛区网络赛D
    hdu 4003 树形dp+分组背包 2011大连赛区网络赛C
    hdu 4002 欧拉函数 2011大连赛区网络赛B
    跨域经验总结
  • 原文地址:https://www.cnblogs.com/cong12586/p/10544040.html
Copyright © 2011-2022 走看看