酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

描述 同学们都玩过斗地主,如果单牌一张一张出,有可能跑不掉,但是如果这些单牌连成顺子,则有可能一下子出完手中的牌,从而赢得比赛。假设我们a 2 3 4 5 6 7 8 9 10 j q k这些纸牌用1-13的数字来替代,现在输入一个n,再输入n张纸牌,判断这n张纸牌是否是一个顺子,顺子是指连续的纸牌,例如1 2 3 4 5 就是一个顺子,而2 3 6 8就不是顺子。如果只有一个数,就输出这个数。(用c++完成) 输入描述 输入共两行: 第一行输入一个n,为纸牌的数量。 第二行为n个数,为纸牌上的数字。 输出描述 是否是顺子,是输出“yes”不是输出“no”。如果只有一个数,就输出这个数

以下是用 C++ 实现的代码: ```cpp #include <iostream> #include <vector> #include <algorithm> bool isStraight(std::vector<int>& nums) { // 对输入的数字进行排序 std::sort(nums.begin(), nums.end()); int zeroCount = 0; // 统计 0 的个数 for (int num : nums) { if (num == 0) { zeroCount++; } } // 检查相邻数字的差值 for (int i = zeroCount; i < nums.size() - 1; i++) { if (nums[i + 1] == nums[i]) { return false; } if (nums[i + 1] - nums[i] > 1) { // 差值大于 1 时,用 0 来填补 if (nums[i + 1] - nums[i] - 1 > zeroCount) { return false; } zeroCount -= nums[i + 1] - nums[i] - 1; } } return true; } int main() { int n; std::cin >> n; std::vector<int> nums(n); for (int i = 0; i < n; i++) { std::cin >> nums[i]; } if (n == 1) { std::cout << nums[0] << std::endl; } else { if (isStraight(nums)) { std::cout << "yes" << std::endl; } else { std::cout << "no" << std::endl; } } return 0; } ``` 1. 输入数据时,要确保输入的是有效的整数。 2. 处理边界情况,如输入的数字数量为 0 或负数。 3. 考虑代码的效率和可读性,对于大规模数据输入的处理能力。 [2024-12-22 19:10:37 | AI写代码神器 | 466点数解答]

相关提问