1. 程式人生 > 其它 >【藍橋杯】題目 1115: DNA

【藍橋杯】題目 1115: DNA

技術標籤:藍橋杯演算法

題目 1115: DNA

時間限制: 1Sec 記憶體限制: 128MB

題目描述
小強從小就喜歡生命科學,他總是好奇花草鳥獸從哪裡來的。終於, 小強上中學了,接觸到了神聖的名詞–DNA.它有一個雙螺旋的結構。這讓一根筋的小強抓破頭皮,“要是能畫出來就好了” 小強喊道。現在就請你幫助他吧

輸入
輸入包含多組測試資料。第一個整數N(N<=15),N表示組數,每組資料包含兩個整數a,b。a表示一個單位的DNA串的行數,a為奇數且 3<=a<=39。b表示重複度(1<=b<=20)。

輸出
輸出DNA的形狀,每組輸出間有一空行。

樣例輸入
2

3 1
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; }