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代表列
若上下对称则
若左右对称
若中心对称
#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; }
这段代码还可以优化,但是目前没有思路。