AcWing 5538. 回文游戏 博弈论

数据范围太大,考虑用字符串存储,看样例分析了0~10,确实没考虑出来10以后的情况

引用y老师的板书 

 



string s;


void solve()
{
	cin >> s;
	
	if (s.size() == 0) cout << "E" << endl;
	else if (s.size() == 1) cout << "B" << endl;
	else a
	{
		if (s.back() == '0') cout << "E" << endl;
		else cout << "B" << endl;	
	}

}	


要判断一个字符串是否是回文,我们需要比较字符串的前后字符是否相同。对于中文回文,我们也需要进行类似的比较。由于中文字符通常占用多个字节,我们需要确保正确处理每个字符。 以下是一个用C语言实现的函数,用于判断一个中文字符串是否是回文: ```c #include <stdio.h> #include <string.h> #include <stdbool.h> bool isPalindrome(const char* str) { int left = 0; int right = strlen(str) - 1; while (left < right) { // 获取左边的字符 char leftChar[4] = {0}; int leftLen = 0; while (left < right && (str[left] & 0x80) && (str[left+1] & 0x80)) { leftChar[leftLen++] = str[left++]; if (leftLen >= 3) break; } leftChar[leftLen] = '\0'; // 获取右边的字符 char rightChar[4] = {0}; int rightLen = 0; while (right > left && (str[right] & 0x80) && (str[right-1] & 0x80)) { rightChar[rightLen++] = str[right--]; if (rightLen >= 3) break; } rightChar[rightLen] = '\0'; // 比较左右字符 if (strcmp(leftChar, rightChar) != 0) { return false; } left++; right--; } return true; } int main() { const char* str1 = "床前明月光,疑是地上霜。举头望明月,低头思故乡。"; const char* str2 = "abcba"; printf("'%s' is palindrome: %s\n", str1, isPalindrome(str1) ? "true" : "false"); printf("'%s' is palindrome: %s\n", str2, isPalindrome(str2) ? "true" : "false"); return 0; } ``` 这个函数的工作原理如下: 1. 使用两个指针 `left` 和 `right` 分别指向字符串的开始和结束。 2. 在每次循环中,分别获取 `left` 和 `right` 指向的中文字符。 3. 比较这两个字符是否相同,如果不同则返回 `false`。 4. 如果相同,则将 `left` 和 `right` 指针分别向中间移动,继续比较下一个字符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值