SDUT第二次选拔赛 7-2魔镜与抽卡

7-2 魔镜与抽卡

Description

最近,billow和他的同学们迷上了一个名叫神源的游戏,因为他们都想抽出同样的某个角色,所以他们都因此而努力奋斗着。

由于这个游戏抽卡需要很多的资源,并且有可能抽不到自己想要的角色,所以为了自己的努力没有白费,他们准备找一些其他的可(xuan)靠(xue)的办法。于是他们拜托ws小朋友在哆啦AC梦那里借来了神奇的魔镜。对着这个魔镜念动咒语就能保证自己必定抽到。

但是因为这个角色至少抽到两次才能发挥作用,所以他们的需求比较复杂,因此要念动的咒语也会比较复杂。我们可以把咒语抽象为n行每行m个字符的字符矩阵。如果这个矩阵是上下对称的,那么魔镜就能保证小保底不歪。如果这个矩阵是左右对称的,那么魔镜就能保证在大保底之后能再抽出一个。如果这个矩阵是中心对称的,那么魔镜就能保证在石头用完之前必定能抽出两个。现在,ws小朋友给出了一个魔咒,他们想知道这个魔咒有什么效果。

Input

第一行输入两个数n,m 表示行数和列数 1≤n,m≤103

接下来n行,每行m个字符,表示字符矩阵。保证只有小写字母。

Output

输出1~3行。 如果这个字符矩阵上下对称,输出 "xiaobaodi!"(没有引号)。如果这个字符矩阵左右对称,输出"dabaodi!"(没有引号)。如果这个字符矩阵中心对称,输出"wuhu!"(没有引号)。如果满足多种对称,则按上下,左右,中心的顺序输出。如果都不是,输出"***,tuiqian!"(没有引号)。

Sample

Input1

3 5
abcde
fghij
abcde

Output1

xiaobaodi!

Input2

5 5
abcde
fghij
klmno
pqrst
uvwxy

Output2

***,tuiqian!

Input3

4 4
aaaa
aaaa
aaaa
aaaa

Output3

xiaobaodi!
dabaodi!
wuhu!

 分析一下

判断矩阵是否为左右对称,上下对称,中心对称。

设n行m列(字符串组从str[0]开始输入)

i代表行,j代表列

若上下对称则

str[i][j]==str[n-1-i][j]

若左右对称

str[j][i]==str[j][m-1-i]

若中心对称

str[i][j]==str[n-1-i][m-1-j]

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
    int n,m,i,j,f1=1,f2=1,f3=1;
    char str[1000][1000];
    scanf("%d %d",&n,&m);
    for(i=0;i<n;i++)
    {
        scanf("%s",str[i]);
    }
    for(i=0;i<n/2;i++)//判断上下对称
    {
        for(j=0;j<m;j++)
        {
            if(str[i][j]!=str[n-1-i][j])
            {
                f1=0;
                break;
            }
        }
    }
    for(i=0;i<m;i++)//判断左右对称
    {
        for(j=0;j<n/2;j++)
        {
            if(str[j][i]!=str[j][m-1-i])
            {
                f2=0;
                break;
            }
        }
    }
    for(i=0;i<n;i++)//判断中心对称
    {
        for(j=0;j<m;j++)
        {
            if(str[i][j]!=str[n-1-i][m-1-j])

            {
                f3=0;
                break;
            }
        }
    }
    if(f1)printf("xiaobaodi!\n");
    if(f2)printf("dabaodi!\n");
    if(f3)printf("wuhu!\n");
    if(f1==0&&f2==0&&f3==0) printf("***,tuiqian!\n");
    return 0;
}

这段代码还可以优化,但是目前没有思路。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值