# 题目描述
聪明的魔法师水獭正在学习悬浮咒(𝔚𝔦𝔫𝔤𝔞𝔯𝔡𝔦𝔲𝔪 𝔏𝔢𝔳𝔦𝔬𝔰𝔞)。
咒语的力量源自于平衡。水獭发现,只有找到具有平衡性质的 “魔力字符串 “,才能成功施展出魔法。具体来说,“魔力字符串 “具有以下特点:
-
如果字符串长度为奇数,且其是一个回文串,即正着读和反着读相同,则此字符串为 “魔力字符串”。
-
如果字符串长度为偶数,且其倒序后与原字符串的每一对应位置字符都不相同,则此字符串为 “魔力字符串”。
现在,请你帮忙判断对于给定的字符串,是否是” 魔力字符串 “。
# 输入格式
第一行一个正整数 ,表示接下来有 组数据要判断,保证 。
对于每组数据,输入一行一个字符串 ,仅包含小写字母,保证 ,其中 表示字符串 的长度。
# 输出格式
对于每组输入,输出一行,若 是 “魔力字符串”,输出 Wingardium Leviosa
,否则输出 The spell fails
。
# 样例输入
4 | |
level | |
otter | |
otters | |
ottero |
# 样例输出
Wingardium Leviosa | |
The spell fails | |
Wingardium Leviosa | |
The spell fails |
# 题解:模拟
直接用字符数组存下字符串,然后依题意模拟即可。以下是参考代码:
#include <stdio.h> | |
#include <string.h> | |
#include <stdbool.h> | |
int T; | |
char str[100010]; | |
int main() | |
{ | |
// freopen("C.in", "r", stdin); | |
// freopen("C.out", "w", stdout); | |
scanf("%d", &T); | |
while (T -- ) | |
{ | |
getchar(); | |
scanf("%s", str); | |
int len = strlen(str); | |
bool flag = true; | |
if (len & 1) | |
{ | |
for (int i = 0; i < (len >> 1); ++ i) | |
if (str[i] != str[len - 1 - i]) | |
{ | |
flag = false; | |
break; | |
} | |
} | |
else | |
{ | |
for (int i = 0; i < (len >> 1); ++ i) | |
if (str[i] == str[len - 1 - i]) | |
{ | |
flag = false; | |
break; | |
} | |
} | |
if (flag) | |
puts("Wingardium Leviosa"); | |
else | |
puts("The spell fails"); | |
} | |
return 0; | |
} |