【藍橋杯】題目 1115: DNA
阿新 • • 發佈:2020-12-13
題目 1115: DNA
時間限制: 1Sec 記憶體限制: 128MB
題目描述
小強從小就喜歡生命科學,他總是好奇花草鳥獸從哪裡來的。終於, 小強上中學了,接觸到了神聖的名詞–DNA.它有一個雙螺旋的結構。這讓一根筋的小強抓破頭皮,“要是能畫出來就好了” 小強喊道。現在就請你幫助他吧
輸入
輸入包含多組測試資料。第一個整數N(N<=15),N表示組數,每組資料包含兩個整數a,b。a表示一個單位的DNA串的行數,a為奇數且 3<=a<=39。b表示重複度(1<=b<=20)。
輸出
輸出DNA的形狀,每組輸出間有一空行。
樣例輸入
2
5 4
樣例輸出
刷題地址
思路:
- 分析單個DNA輸出的特點,以3行3列DNA為例,[0][0]、 [0][2]、[1][1]、[2][0]、[2][2]處是X,若a為行列數3,i為行標,j為列標,可以找到規律:當i=j或者i=a-i-1時,該位置為X
[0][0] | [0][1] | [0][2] |
---|---|---|
[1][0] | [1][1] | [1][2] |
[2][0] | [2][1] | [2][2] |
- 因為存在重複度,若是單純的重複輸出一遍,會多出第一行,需要做個標誌flag=0來確定是否已輸出過一遍第一行,在重複第二次的時候從第二行開始輸出
C語言程式碼:
#include<stdio.h>
int main()
{
int N; //組數
int a; //一個單位的DNA串的行數,a為奇數且 3<=a<=39
int b; //b表示重複度 1<=b<=20
int i,j,k,m; //迴圈用
scanf("%d",&N);
for(i=0;i<N;i++)
{
int flag=0; //標記DNA串是否完整輸出一遍,注意位置,原先寫在//處,報錯
scanf("%d %d",&a,&b);
for(j=0;j<b;j++)
{
//
for(k=0;k<a;k++)
{
if(flag== 0 || k!=0)
{
for(m=0;m<a;m++)
{
if(k==m || k==a-m-1)
printf("X");
else
printf(" ");
flag=1;
}
printf("\n");
}
}
}
printf("\n");
}
return 0;
}