题解
集卡
1 条题解
-
0
P4429 集卡(入门)
解题思路
读入一串卡牌编号,最后一个0表示结束,只要其中出现编号5(隐藏款),就输出yes,否则输出no。注意不是数有几个5,而是看有没有,所以用一个"标记"变量found就够了:found一开始是0(还没抽到),循环里每读一张牌x,如果 x==5,就把found改成1。循环结束后检查found:是1就说明抽到过隐藏款,输出yes;还是0就说明一张都没抽到,输出no。边界情况:如果5在很靠前的位置(比如第一张),我们把found改成1后,后面的牌不管是什么都不用再改,循环结束时found还是1;如果读到0之前一张5都没有,found保持0,输出no;如果第一个数就是0(一张牌都没有),也输出no,符合"没抽到"的意思。注意输出是小写的yes/no,要和样例一致。
参考代码
// 程序用途:读入一串卡牌编号(以0结尾),只要出现5(隐藏款)就输出yes否则输出no #include <iostream> using namespace std; int main() { int x, found = 0; // found标记是否抽到隐藏款5,0表示还没抽到 while (cin >> x && x != 0) { // 读到0结束 if (x == 5) found = 1; // 编号是5,说明抽到隐藏款 } if (found) cout << "yes" << endl; // 抽到过就输出yes else cout << "no" << endl; // 一张都没抽到就输出no return 0; }复杂度分析
把n张牌各读一遍、各判断一次,所以时间复杂度 O(n);只用x、found两个变量,额外空间复杂度 O(1)。
- 1