当前位置:   article > 正文

C++笔试强训day9

C++笔试强训day9

目录

1.添加逗号

2.跳台阶

3.扑克牌顺子


day9的题目都比较简单,就不赘述了

1.添加逗号

链接

我的思路很清晰也很简单易懂:

把输入数据存入字符串string s,定义一个string ret,然后逆置string s,将s中的数一个一个存入ret,每三个数加一个逗号,最后逆置ret后输出就行。

  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4. #define int long long
  5. signed main()
  6. {
  7. string si;
  8. cin >> si;
  9. string tmp;
  10. reverse(si.begin(), si.end());
  11. for (int i = 0; i < si.size(); ++i)
  12. {
  13. if (i + 1 < si.size() && (i + 1) % 3 == 0)
  14. {
  15. tmp += si[i];
  16. tmp += ',';
  17. }
  18. else
  19. {
  20. tmp += si[i];
  21. }
  22. }
  23. reverse(tmp.begin(), tmp.end());
  24. cout << tmp << endl;
  25. }

2.跳台阶

链接

基本dp问题:

  1. #include <iostream>
  2. using namespace std;
  3. const int N = 60;
  4. int dp[N];
  5. int main()
  6. {
  7. int n;
  8. cin >> n;
  9. // 初始化
  10. dp[1] = 1;
  11. dp[2] = 2;
  12. for (int i = 3; i <= n; ++i)
  13. {
  14. dp[i] = dp[i - 1] + dp[i - 2];
  15. }
  16. cout << dp[n] << endl;
  17. return 0;
  18. }

3.扑克牌顺子

链接

我当时的思路是排完序之后分情况讨论,即分别有几个零的情况:

  1. class Solution {
  2. public:
  3. // 哈希加分类
  4. int cnt0 = 0;
  5. bool IsContinuous(vector<int>& numbers) {
  6. for (auto i : numbers) {
  7. if (i == 0)
  8. cnt0++;
  9. }
  10. sort(numbers.begin(), numbers.end());
  11. if (cnt0 == 4)
  12. return true;
  13. if (cnt0 == 3)
  14. if (numbers[4] - numbers[3] < 5 && numbers[4] !=numbers[3])
  15. return true;
  16. if (cnt0 == 2) {
  17. for (int i = 2; i < 4; ++i) {
  18. if (numbers[i + 1] - numbers[i] > 1) {
  19. cnt0 = cnt0 - (numbers[i + 1] - numbers[i]) + 1;
  20. }
  21. }
  22. if (cnt0 >= 0)
  23. return true;
  24. }
  25. if (cnt0 == 1) {
  26. for (int i = 1; i < 4; ++i) {
  27. if (numbers[i + 1] - numbers[i] > 1) {
  28. cnt0 = cnt0 - (numbers[i + 1] - numbers[i]) + 1;
  29. }
  30. }
  31. if (cnt0 >= 0)
  32. return true;
  33. }
  34. if (cnt0 == 0) {
  35. for (int i = 0; i < 4; ++i) {
  36. if (numbers[i + 1] - numbers[i] != 1)
  37. return false;
  38. }
  39. return true;
  40. }
  41. return false;
  42. }
  43. };

还有一种优质解法就是先找出规律:

随后直接秒了:

  1. class Solution
  2. {
  3. bool hash[14] = { 0 };
  4. public:
  5. bool IsContinuous(vector<int>& numbers)
  6. {
  7. int maxVal = 0, minVal = 14;
  8. for (auto x : numbers)
  9. {
  10. if (x)
  11. {
  12. if (hash[x]) return false;
  13. hash[x] = true;
  14. maxVal = max(maxVal, x);
  15. minVal = min(minVal, x);
  16. }
  17. }
  18. return maxVal - minVal <= 4;
  19. }
  20. };

这种数学解法值得学习,虽然我个人觉得有点难想到。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/563531
推荐阅读
相关标签
  

闽ICP备14008679号