7 6 1 2 2 方塊轉換 70分

2021-10-07 16:26:06 字數 3741 閱讀 7445

一塊 n x n(1<=n<=10)正方形的黑白瓦片的圖案要被轉換成新的正方形圖案.

寫乙個程式來找出將原始圖案按照以下列轉換方法轉換成新圖案的小方式:

#1:轉 90 度:圖案按順時針轉 90 度.

#2:轉 180 度:圖案按順時針轉 180 度.

#3:轉 270 度:圖案按順時針轉 270 度.

#4:反射:圖案在水平方向翻轉(形成原圖案的映象).

#5:組合:圖案在水平方向翻轉,然後按照#1-#3 之一轉換.

#6:不改變:原圖案不改變.

#7:無效轉換:無法用以上方法得到新圖案. 如果有多種可用的轉換方法,請選擇序號小的那個.

輸入格式:

第一行: 單獨的乙個整數 n.

第二行到第 n+1 行: n 行每行 n 個字元(不是「@」就是「-」);這是轉換前的正方形.

第 n+2 行到第 2*n+1 行: n 行每行 n 個字元(不是「@」就是「-」);這是轉換後的正方形.

輸出格式:

單獨的一行包括1到7之間的乙個數字(在上文已描述)表明需要將轉換前的正方形變為轉換後的正方形的轉換方法.

輸入樣例1:

在這裡給出一組輸入。例如:

3 

@-@

---

@@-

@-@

@--

--@

輸出樣例1:

在這裡給出相應的輸出。例如:

1
輸入樣例2:

5

-@@@-

-@@--

-@---

-----

-----

-----

----@

---@@

--@@@

-----

輸出樣例2:

5
輸入樣例3:

5

@@@@@

@---@

@@@@@

@@@@@

@@@@@

@@@@@

@@@@@

@@@@@

@---@

@@@@@

輸出樣例3:

2
【思路】

#3: 反向使用#1;

#4: 各元素的行標不變,列標對稱;

#5: 建立新的二維陣列儲存,原圖形反射後的圖形,記為s3,再用s3與s2比較;

#6: 直接判斷各元素是否一一對應相等;

#7: 前6個均不被呼叫即輸出7;

題目要求:如果有多種可用的轉換方法,請選擇序號小的那個

swith語句是個好想法:可以按從小到大的順序呼叫轉換函式,而且只需要呼叫乙個即可,最後如果前6個均沒有被呼叫,才會輪到#7。

【源**】

#include

using

namespace std;

inttrans_fun1

(const

char s1[

10],const

char s2[

10],const

int n)

// 順時針旋轉90度;

else}if

(flag ==0)

else

}return flag;

}int

trans_fun2

(const

char s1[

10],const

char s2[

10],const

int n)

// 順時針旋轉180度

else}if

(flag ==0)

else

}return flag;

}int

trans_fun3

(const

char s1[

10],const

char s2[

10],const

int n)

// 順時針旋轉270度

else

}int

trans_fun4

(const

char s1[

10],const

char s2[

10],const

int n)

// 反射函式;

else}if

(flag ==0)

else

}return flag;

}int

trans_fun5

(const

char s1[

10],const

char s2[

10],const

int n)

// 組合函式;

;// 原圖形反射後的圖形;

for(

int i =

0; i < n; i++)}

if(trans_fun1

(s3, s2, n)

||trans_fun2

(s3, s2, n)

||trans_fun3

(s3, s2, n)

)else

}int

trans_fun6

(const

char s1[

10],const

char s2[

10],const

int n)

// 不改變函式;

else}if

(flag ==0)

else

}return flag;

}int

main()

;// 轉換前正方形

for(

int i =

0; i < n; i++)}

char s2[10]

[10]=

;// 轉換後正方形

for(

int i =

0; i < n; i++)}

for(

int x =

1; x <=

7; x++

)break

;case2:

if(trans_fun2

(s1, s2, n)

)break

;case3:

if(trans_fun3

(s1, s2, n)

)break

;case4:

if(trans_fun4

(s1, s2, n)

)break

;case5:

if(trans_fun5

(s1, s2, n)

)break

;case6:

if(trans_fun6

(s1, s2, n)

)break

;case7:

cout <<

"7"<< endl;

break;}

if(flag ==1)

// 成功呼叫轉換函式,終止程式,保證呼叫的序號最小;

else

}return0;

}

78 方塊轉換

問題描述 一塊n x n 1 寫乙個程式來找出將原始圖案按照以下列轉換方法轉換成新圖案的最小方式 1 轉90度 圖案按順時針轉90度。2 轉180度 圖案按順時針轉180度。3 轉270度 圖案按順時針轉270度。4 反射 圖案在水平方向翻轉 形成原圖案的映象 5 組合 圖案在水平方向翻轉,然後按照...

luogu P1205 方塊轉換

一塊n x n 1 n 10 正方形的黑白瓦片的圖案要被轉換成新的正方形圖案。寫乙個程式來找出將原始圖案按照以下列轉換方法轉換成新圖案的最小方式 1 轉90度 圖案按順時針轉90度。2 轉180度 圖案按順時針轉180度。3 轉270度 圖案按順時針轉270度。4 反射 圖案在水平方向翻轉 以 鉛垂...

USACO 1 2 2 方塊轉換

一塊n x n 1 n 10 正方形的黑白瓦片的圖案要被轉換成新的正方形圖案。寫乙個程式來找出將原始圖案按照以下列轉換方法轉換成新圖案的最小方式 1 轉90度 圖案按順時針轉90度。2 轉180度 圖案按順時針轉180度。3 轉270度 圖案按順時針轉270度。4 反射 圖案在水平方向翻轉 以 鉛垂...