1. 程式人生 > >C語言官網藍橋杯訓練1115DNA

C語言官網藍橋杯訓練1115DNA

dna 數加 != lse 訓練 測試 只有一個 列數 排列

這道題是比較簡單的輸出字符圖形的題,但是有幾個坑還是要註意下。

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("\n");
}
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("\n");
}
}
printf("\n");//最後輸出結束後輸出空行。
}
return 0;
}

C語言官網藍橋杯訓練1115DNA