紫书——Palindromes UVA - 401

本文介绍了一种判断字符串是否为回文或镜像字符串的方法,并提供了完整的C++实现代码。通过查找特定的镜像字符集并进行比较,可以有效地判断给定字符串是否满足条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题解:

改题目要记录下镜像的字母,然后判断是否相同(即使镜像转换后,字符串反转是否与原串相同),理解好题意就好

注意点:不是每个答案之间空一横,而是每输出一个就要输出一行,不然会PE

#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>

using namespace std;

char has[] = "AEHIJLMOSTUVWXYZ12358";
char cha[] = "A3HILJMO2TUVWXY51SEZ8";

bool prime(string str) {
	int r = str.size()-1;
	int l = 0;
	while(l < r) {
		if(str[l] != str[r]) return false;
		l++; r--;
	}
	return true;
}

bool mirror(string str) {
	int lon = strlen(has);
	string tmp = str;
	int len = tmp.size();
	for(int i = 0; i < len; i++) {
		int pos = find(has,has+lon,str[i]) - has;
		if(pos == lon) return false;	//没有镜像的字符
		else tmp[i] = cha[pos];
	}
	for(int i = 0; i < len; i++) {
		if(str[i] != tmp[len-i-1]) return false;
	}
	return true;
}

int main() {
	//freopen("in.txt","r",stdin);
	string str;
	int fir = 0;
	while(getline(cin,str)) {
		bool pri, mir;
		pri = prime(str);
		mir = mirror(str);
		cout << str;
		if(!pri && !mir) printf(" -- is not a palindrome.\n");
		if(pri && !mir) printf(" -- is a regular palindrome.\n");
		if(!pri && mir) printf(" -- is a mirrored string.\n");
		if(pri && mir) printf(" -- is a mirrored palindrome.\n");
		fir = 1;
		printf("\n");
	}

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值