【♂Not The Triumph♂O(∩_∩)O哈哈~But The Struggle♂】

竞赛决不是捷径,它只是另一种艰辛的生活方式。得到与失去,只有时间会去评判;成功与失败,只有历史能去仲裁。我不会永远成功,正如我不会永远失败一样

  C++博客 :: 首页 :: 联系 ::  :: 管理
  6 Posts :: 239 Stories :: 25 Comments :: 0 Trackbacks

常用链接

留言簿(7)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 108434
  • 排名 - 229

最新评论

阅读排行榜

评论排行榜

一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式:

  • 1:转90度:图案按顺时针转90度。
  • 2:转180度:图案按顺时针转180度。
  • 3:转270度:图案按顺时针转270度。
  • 4:反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。
  • 5:组合:图案在水平方向翻转,然后再按照1到3之间的一种再次转换。
  • 6:不改变:原图案不改变。
  • 7:无效转换:无法用以上方法得到新图案。
  • 如果有多种可用的转换方法,请选择序号最小的那个。

INPUT FORMAT:

(file transform.in)

第一行: 单独的一个整数N。

第二行到第N+1行: N行每行N个字符(不是“@”就是“-”);这是转换前的正方形。

第N+2行到第2*N+1行: N行每行N个字符(不是“@”就是“-”);这是转换后的正方形。

OUTPUT FORMAT:

(file transform.out)

单独的一行包括1到7之间的一个数字(在上文已描述)表明需要将转换前的正方形变为转换后的正方形的转换方法。


input:
3
@-@
---
@@-
@-@
@--
--@

output:
1

【参考程序】:
/*
ID: XIONGNA1
PROG: transform
LANG: C++
*/
#include
<stdio.h>
#include
<stdlib.h>
#include
<string.h>
char a[11][11],b[11][11],c[11][11],d[11][11];
int n;
bool tf1()
{
    
for (int i=1;i<=n;i++)
        
for (int j=1;j<=n;j++)
            c[j][n
-i+1]=a[i][j];
    
for (int i=1;i<=n;i++)
        
for (int j=1;j<=n;j++)
            
if (c[i][j]!=b[i][j]) return false;
    
return true;
}
bool tf2()
{
    
for (int i=1;i<=n;i++)
        
for (int j=1;j<=n;j++)
            c[n
-i+1][n-j+1]=a[i][j];
    
for (int i=1;i<=n;i++)
        
for (int j=1;j<=n;j++)
            
if (c[i][j]!=b[i][j]) return false;
    
return true;
}
bool tf3()
{
    
for (int i=1;i<=n;i++)
        
for (int j=1;j<=n;j++)
            c[n
-j+1][i]=a[i][j];
    
for (int i=1;i<=n;i++)
        
for (int j=1;j<=n;j++)
            
if (c[i][j]!=b[i][j]) return false;
    
return true;
}
bool tf4()
{
    
for (int i=1;i<=n;i++)
        
for (int j=1;j<=n;j++)
            c[i][n
-j+1]=a[i][j];
    
for (int i=1;i<=n;i++)
        
for (int j=1;j<=n;j++)
            
if (c[i][j]!=b[i][j]) return false;
    
return true;
}
bool tf5()
{
    
for (int i=1;i<=n;i++)
        
for (int j=1;j<=n;j++)
            c[i][n
-j+1]=a[i][j];
    
bool d1,d2,d3;
    d1
=d2=d3=true;
    
for (int i=1;i<=n;i++)
        
for (int j=1;j<=n;j++)
            d[j][n
-i+1]=c[i][j];
    
for (int i=1;i<=n;i++)
    {
        
for (int j=1;j<=n;j++)
            
if (d[i][j]!=b[i][j])
            {
                d1
=false;
                
break;
            }
        
if (!d1) break;
    }
    
for (int i=1;i<=n;i++)
        
for (int j=1;j<=n;j++)
            d[n
-i+1][n-j+1]=c[i][j];
    
for (int i=1;i<=n;i++)
    {
        
for (int j=1;j<=n;j++)
            
if (d[i][j]!=b[i][j])
            {
                d2
=false;
                
break;
            }
        
if (!d2) break;
    }
    
for (int i=1;i<=n;i++)
        
for (int j=1;j<=n;j++)
            d[n
-j+1][i]=c[i][j];
    
for (int i=1;i<=n;i++)
    {
        
for (int j=1;j<=n;j++)
            
if (d[i][j]!=b[i][j])
            {
                d3
=false;
                
break;
            }
        
if (!d3) break;
    }
    
return (d1||d2||d3);
}
bool tf6()
{
    
for (int i=1;i<=n;i++)
        
for (int j=1;j<=n;j++)
            
if (c[i][j]!=b[i][j]) return false;
    
return true;
}
int main()
{
    freopen(
"transform.in","r",stdin);
    freopen(
"transform.out","w",stdout);
    scanf(
"%d\n",&n);
    
for (int i=1;i<=n;i++)
    {
        
for (int j=1;j<=n;j++) scanf("%c",&a[i][j]);
        getchar();
    }
    
for (int i=1;i<=n;i++)
    {
        
for (int j=1;j<=n;j++) scanf("%c",&b[i][j]);
        getchar();
    }
    
if (tf1()) printf("1\n");
    
else if (tf2()) printf("2\n");
    
else if (tf3()) printf("3\n");
    
else if (tf4()) printf("4\n");
    
else if (tf5()) printf("5\n");
    
else if (tf6()) printf("6\n");
    
else printf("7\n");
    
return 0;
}
posted on 2009-07-14 16:13 开拓者 阅读(327) 评论(0)  编辑 收藏 引用 所属分类: USACO 题解

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理