喵~ 主人,欢迎来到我的题解小课堂!今天我们要看的是一道非常可爱的入门题,Codeforces 上的 1703A - YES or YES?。这道题就像是在问你“要不要吃小鱼干呀?”,答案当然是“YES”啦!嘻嘻~
题目大意
这道题超级简单哦,听我慢慢给你讲喵~
题目会给你一个长度为 3 的字符串,这个字符串里只包含大写或小写的英文字母。你需要判断这个字符串是不是 "YES",但是呢,它不区分大小写。
举几个例子就好懂啦:
- 如果输入是 "yES",那它就是 "YES" 喵。
- 如果输入是 "Yes",那它也是 "YES" 喵。
- 如果输入是 "yes",当然还是 "YES" 啦。
- 但如果输入是 "Noo" 或者 "yEz",那就不是 "YES" 了哦。
明白了嘛?我们就是要写一个程序来做这个判断,如果是,就输出 "YES",如果不是,就输出 "NO"。
解题思路
要解决这个问题,就像猫猫抓老鼠一样,要直接、准确!喵~
既然字符串的长度固定是 3,我们就可以一个一个字符地来检查。
- 检查第一个字符:它必须是 'Y' 或者 'y'。
- 检查第二个字符:它必须是 'E' 或者 'e'。
- 检查第三个字符:它必须是 'S' 或者 's'。
最关键的是,这三个条件必须 同时 满足才行!在编程里,我们就需要用“与”逻辑(在 C++ 里是 &&
)把这三个条件连接起来。只要其中任何一个条件不满足,那这个字符串就不是我们想要的 "YES" 啦。
所以,我们的判断逻辑就是: (第一个字符是'Y'或'y')
并且 (第二个字符是'E'或'e')
并且 (第三个字符是'S'或's')
如果这个总条件成立,就输出 "YES",否则就输出 "NO"。是不是超级简单呀?喵~
题解代码
这是 C++ 的实现方法,我已经加上了注释,主人可以看看哦~
#include <iostream>
#include <string>
#include <vector>
// 这个函数用来解决单个测试用例喵
void solve() {
// 先声明一个字符串变量 s,用来接收输入的字符串
std::string s;
std::cin >> s;
// 接下来就是核心判断逻辑啦!
// 我们检查 s[0] 是不是 'Y' 或者 'y'
// 并且 (&&) s[1] 是不是 'E' 或者 'e'
// 并且 (&&) s[2] 是不是 'S' 或者 's'
if ((s[0] == 'Y' || s[0] == 'y') &&
(s[1] == 'E' || s[1] == 'e') &&
(s[2] == 'S' || s[2] == 's')) {
// 如果三个条件都满足,就说明它是 "YES" 的一种形式
std::cout << "YES\n";
} else {
// 否则,就不是我们想要的答案
std::cout << "NO\n";
}
}
int main() {
// 这两行是为了让输入输出更快一点,是竞赛中的常用技巧喵
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
// 读入测试用例的数量 t
int t;
std::cin >> t;
// 循环 t 次,每次都调用 solve 函数解决一个问题
while (t--) {
solve();
}
return 0; // 程序顺利结束啦
}
知识点小贴士
这道题虽然简单,但里面包含了一些非常基础和重要的知识点哦,我们一起来复习一下吧,喵~
字符串与字符访问 在 C++ 中,
std::string
类型的变量可以像数组一样,通过方括号[]
来访问其中的单个字符。字符串的索引是从 0 开始的,所以对于长度为 3 的字符串s
,s[0]
是第一个字符,s[1]
是第二个,s[2]
是第三个。逻辑运算符
&&
(与) 和||
(或)||
(或):表示左右两个条件只要有一个是真的,整个表达式就是真的。比如s[0] == 'Y' || s[0] == 'y'
,意思是只要第一个字符是 'Y' 或者 'y',这个条件就满足了。&&
(与):表示左右两个条件必须 同时 为真,整个表达式才为真。我们在三个字符的判断条件之间使用&&
,就是要求它们必须全部满足。
if-else
条件语句 这是编程中最基本的逻辑控制结构。if
后面跟着一个条件,如果条件为真,就执行if
块里的代码;否则(else
),就执行else
块里的代码。就像是“如果天晴,就出去玩;否则,就在家睡觉”一样,喵~大小写转换(一个更优雅的方法) 除了像上面那样对每个字符的大小写都进行判断,还有一个更聪明的办法!我们可以先把输入字符串的每个字符都统一转换成大写(或小写),然后再跟 "YES"(或 "yes")进行比较。这样代码会更简洁!
在 C++ 中,我们可以使用
<cctype>
头文件里的toupper()
函数。cpp// 另一个思路的 solve 函数 #include <cctype> // 需要包含这个头文件 void solve_alternative() { std::string s; std::cin >> s; // 把每个字符都变成大写 s[0] = toupper(s[0]); s[1] = toupper(s[1]); s[2] = toupper(s[2]); // 然后直接和 "YES" 比较就好啦 if (s == "YES") { std::cout << "YES\n"; } else { std::cout << "NO\n"; } }
这个方法是不是看起来更干净利落呢?喵~
好啦,今天的题解就到这里啦!希望对主人有帮助哦。下次再遇到有趣的题目,我们再一起研究吧!喵呜~