description
一塊n x n(1<=n<=10)正方形的黑白瓦片的圖案要被轉換成新的正方形圖案。寫乙個程式來找出將原始
圖案按照以下列轉換方法轉換成新圖案的最小方式:
如果有多種可用的轉換方法,請選擇序號最小的那個。
input
第一行: 單獨的乙個整數n。
第二行到第n+1行: n行每行n個字元(不是「@」就是「-」);這是轉換前的正方形。
第n+2行到第2*n+1行: n行每行n個字元(不是「@」就是「-」);這是轉換後的正方形。
output
單獨的一行包括1到7之間的乙個數字(在上文已描述)表明需要將轉換前的正方形變為轉換後的正方形的轉換方法。
sample input
@@-
@-@
@– –@
sample output
題解:
直接模擬,列舉每一種方案就行了,需要注意的是:usaco是不給用goto的,注意**的清晰程度。
設a是原始狀態,b是改變後的狀態,右旋90度:b[j][n-i+1]=a[i][j];水平翻**b[i][n-j+1]:=a[i][j]。
**:
var
n,i,o,p1,p2,p3,p4,p6:longint;
a,b,c:array[1..20,1..20] of char;
begin
readln(n);
for i:=1
to n do
begin
for o:=1
to n do
read(a[i,o]);
readln;
end;
for i:=1
to n do
begin
for o:=1
to n do
read(b[i,o]);
readln;
end;
for i:=1
to n do
for o:=1
to n do
c[i,o]:=a[i,n+1-o];
for i:=1
to n do
for o:=1
to n do
begin
if a[i,o]<>b[n+1-i,n+1-o] then inc(p2);
if a[i,o]<>b[o,n+1-i] then inc(p1);
if b[i,o]<>a[o,n+1-i] then inc(p3);
if a[i,o]<>b[i,n+1-o] then inc(p4);
if a[i,o]<>b[i,o] then inc(p6);
end;
if p1=0
then writeln('1')
else
if p2=0
then writeln('2')
else
if p3=0
then writeln('3')
else
if p4=0
then writeln('4')
else
if p6=0
then writeln('6');
if (p1<>0)and(p2<>0)and(p3<>0)and(p4<>0)and(p6<>0) then
begin
p1:=0;
p2:=0;
p3:=0;
p4:=0;
for i:=1
to n do
for o:=1
to n do
begin
if c[i,o]<>b[n+1-i,n+1-o] then inc(p2);
if c[i,o]<>b[o,n+1-i] then inc(p1);
if c[i,o]<>b[i,n+1-o] then inc(p4);
end;
if (p1=0)or(p2=0)or(p4=0) then writeln('5') else writeln('7');
end;
end.
USACO 1 2 2 方塊轉換
一塊n x n 1 n 10 正方形的黑白瓦片的圖案要被轉換成新的正方形圖案。寫乙個程式來找出將原始圖案按照以下列轉換方法轉換成新圖案的最小方式 1 轉90度 圖案按順時針轉90度。2 轉180度 圖案按順時針轉180度。3 轉270度 圖案按順時針轉270度。4 反射 圖案在水平方向翻轉 以 鉛垂...
10 4做題 USACO1 2方格轉換
方塊轉換 描述 一塊n x n 1 n 10 正方形的黑白瓦片的圖案要被轉換成新的正方形圖案。寫乙個程式來找出將原始圖案按照以下列轉換方法轉換成新圖案的最小方式 1 轉90度 圖案按順時針轉90度。2 轉180度 圖案按順時針轉180度。3 轉270度 圖案按順時針轉270度。4 反射 圖案在水平方...
78 方塊轉換
問題描述 一塊n x n 1 寫乙個程式來找出將原始圖案按照以下列轉換方法轉換成新圖案的最小方式 1 轉90度 圖案按順時針轉90度。2 轉180度 圖案按順時針轉180度。3 轉270度 圖案按順時針轉270度。4 反射 圖案在水平方向翻轉 形成原圖案的映象 5 組合 圖案在水平方向翻轉,然後按照...