你的程序在我的电脑上运行的结果是5.
if (a[i,j]=b[1+n-j,1+n-i])or(a[i,j]=b[j,i])or(a[i,j]=b[1+n-i,j]) then inc(sum[5]);
这一句不靠谱。中间用or的话可能会使sum[5]过大。因为你默认了每一个点可以由镜像之后90°、180°、270°翻转这3种可能得来,而实际上只能是其中的一种。
你应该将sum数组开大一点
给你看一下我改过的程序,可以通过
{
ID省略
PROG:transform
LANG:PASCAL
}program p122;
var
a, b: array[1..10, 1..10] of char;
sum: array[1..9] of longint;
n, i, j: longint;
begin
assign(input,'transform.in'); reset (input);
assign(output,'transform.out'); rewrite(output);
fillchar(sum, sizeof(sum), 0);
readln(n);
for i := 1 to n do
begin
for j := 1 to n do
Read(a[i, j]);
readln;
end;
for i := 1 to n do
begin
for j := 1 to n do
Read(b[i, j]);
readln;
end;
for i := 1 to n do
for j := 1 to n do
begin
if a[i, j] = b[j, 1 + n - i] then
Inc(sum[1]);
if a[i, j] = b[1 + n - i, 1 + n - j] then
Inc(sum[2]);
if a[i, j] = b[1 + n - j, i] then
Inc(sum[3]);
if a[i, j] = b[i, 1 + n - j] then
Inc(sum[4]);
if a[i, j] = b[1 + n - j, 1 + n - i] then
Inc(sum[5]);
if a[i, j] = b[j, i] then
Inc(sum[6]);
if a[i, j] = b[1 + n - i, j] then
Inc(sum[7]);
if a[i, j] = b[i, j] then
Inc(sum[8]);
end;
for i := 1 to 8 do
begin
if n * n = sum[i] then
begin
if (i=5) or (i=6) or (i=7) then writeln(5) else
if i=8 then writeln(6) else writeln(i);
break;
end
else
Inc(sum[9]);
if (sum[9]) = 8 then
writeln(7);
end;
readln;
close(input); close(output);
end.
把sum开到9就行了,跟你原来写的差不多,可以借鉴一下。
USACO……流汗路过、、、
按f9与f2编译后可以
这题做过。