题目
UVA 401 Palidromes
分析
- 镜面字符串应关于中间位置镜面对称,特别地,若中间位置为一字符则该字符也应自镜面对称,所以字符串的字符个数的奇偶需要考量.
- 因为
数字0
和字母O可视为一致,因此仅字母O是合法输入,即不必考虑输入数据包含数字0
.
- 注意格式:每输出一行数据,应跟随输出一空行.
代码
#include <stdio.h>
#include <string.h>
int is_palindrome(char* str, int len)
{
int i;
for (i = 0; i < len/2; i++)
if (*(str + i) != *(str + (len-1) - i))
return 0;
return 2;
}
int is_mirrored(char* str, int len)
{
const char* ch = "AEHIJLMOSTUVWXYZ12358";
const char* re = "A3HILJMO2TUVWXY51SEZ8";
int i, j;
for (i = 0; i < len/2+1; i++) {
for (j = 0; j < 21; j++) {
if (*(str + i) == *(ch + j)) {
if (*(str + (len-1) - i) != *(re + j))
return 0;
break;
}
}
if (j == 21) return 0;
}
return 1;
}
int main(void)
{
char str[25];
int len = 0;
while (scanf("%s", str) != EOF) {
printf("%s", str);
len = strlen(str);
switch (is_palindrome(str, len) | is_mirrored(str, len)) {
case 0:
printf(" -- is not a palindrome.");
break;
case 2:
printf(" -- is a regular palindrome.");
break;
case 1:
printf(" -- is a mirrored string.");
break;
case 3:
printf(" -- is a mirrored palindrome.");
break;
}
printf("\n\n");
}
return 0;
}
UVA 10010 Where’s Waldorf?
分析
- 所需搜寻的模式必定出现且仅出现一次,但大小写不敏感.
- 先遍历确定首字母,再进入搜索,因为模式仅沿八个方向中的固定一个,所以可以滚一遍八方向.
代码
int m, n, x, y;
char map[55][55];
int next[8][2] = {
{
1,