题解
斗地主
1 条题解
-
0
解题思路
顺子就是连续的牌,比如 1 2 3 4 5、6 7 8 9 10,相邻两张牌正好相差 1。
题目保证输入的牌已经从小到大排好,所以我们只要从第 2 张开始,依次检查每一张是不是比前一张正好大 1:
- 只要有一处不满足(差距不是 1),就不是顺子,输出
no; - 全部满足,就输出
yes。
比如 2 3 6 8:3-2=1 没问题,但 6-3=3 不等于 1,所以不是顺子。
参考代码
// P4480 斗地主:判断输入的n张牌是否构成顺子 #include <iostream> using namespace std; int main() { int n; // 纸牌数量 cin >> n; int a[15]; // 存储n张牌(最多13张) for (int i = 0; i < n; i++) cin >> a[i]; // 输入已经从小到大排好 bool ok = true; // 是否构成顺子 // 顺子要求相邻两张牌正好相差1 for (int i = 1; i < n; i++) { if (a[i] != a[i - 1] + 1) { ok = false; // 发现不连续,不是顺子 break; } } if (ok) cout << "yes" << endl; else cout << "no" << endl; return 0; }复杂度分析
需要把 n 张牌从前到后检查一遍,所以时间复杂度是 O(n);用一个数组存牌,额外空间 O(n)。
- 只要有一处不满足(差距不是 1),就不是顺子,输出
- 1