C語言官網藍橋杯訓練1115DNA
阿新 • • 發佈:2019-03-16
dna 數加 != lse 訓練 測試 只有一個 列數 排列 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;
}
這道題是比較簡單的輸出字符圖形的題,但是有幾個坑還是要註意下。
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;
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++)
{
{
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