• 牛客刷题系列(完全数计算,扑克牌大小)



    CSDN话题挑战赛第2期
    参赛话题: 面试宝典

    很多小伙伴为了刷题发愁
    今天为大家推荐一款刷题神奇哦:刷题面试神器牛客
    各大互联网大厂面试真题。从基础到入阶乃至原理刨析类面试题 应有尽有,赶快来装备自己吧!助你面试稳操胜券,solo全场面试官.

    一:完全数计算

    1.1题目:

    链接

    image-20220928224200772

    1.2思路

    • 根据完全数的定义写就好了
    • 注意循环

    1.3旧版本

    #include
    using namespace std;
    
    int Count_Of_Perfect_Number(int n)
    {
    int count = 0, sum = 0;
    for(int i=2; i<=n; ++i)
    {
      for(int j=1; j> n)
     {
      count = Count_Of_Perfect_Number(n);
      cout<

    for(int j=1; j

    1.4效率高的版本

    #include
    #include
    #include
    using namespace std;
    
    int Count(int n)
    {
    int count = 0, sum = 0;
    for(int i=2; i<=n; ++i)
    {
      for(int j=1; j<=sqrt(i); ++j) 
      {
             if(i % j == 0)  //对约数进行求和
              {
                sum += j;
                if( i/j != sqrt(i) && j!=1)
                {
                    sum += i/j;
                }
              }   
         }
         if(sum == i)
             count++;
         sum = 0;
     }
     return count;
    }
    
    int main()
    {
     int n, count;
     while(cin >> n)
     {
      count = Count(n);
      cout<

    if(i % j == 0) //对约数进行求和
    {
    sum += j;
    if( i/j != sqrt(i) && j!=1)
    {
    sum += i/j;
    }
    }

    将O(n)的时间复杂度降到了 O(logn)

    1.5注意事项

    1. 注意头文件的包含:#include
    2. 注意开平方根函数的写法: sqrt()

    二:扑克牌大小

    2.1题目

    image-20220928230250019

    2.2思路

    • 我们可以将牌的状态分为三个:

    • 我们就可以根据这三个状态来解析本题:
    1. 王炸:
      if(s1.size() ==11 || s2.size()==11) //王炸
      {
           if(s1.size() == 11)
               cout<
  1. 普通炸
  else if(s1.size() == 7 || s2.size() == 7) // 普通炸
  {
       if(s1.size() == 7 && s2.size() == 7)
           cout<<(s1[0]>s2[0]?s1:s2);
       else if(s1.size() !=7)
           cout<
  1. 其他:
   else
   {
      int count1 = count(s1.begin(),s1.end(),' ');
      int count2 = count(s2.begin(),s2.end(),' ');
      
      if(count1 != count2)
      {
          cout<<"ERROR";
          return 0;
      }
      string compre("345678910JQKA2jokerJOKER");
      string f1 = s1.substr(0,s1.find(' '));
      string f2 = s2.substr(0,s2.find(' '));
      if(compre.find(f1) >compre.find(f2))
      cout<

2.3 代码实现

#include
#include
#include
using namespace std;

int main()
{
  string s;
  getline(cin,s);
  int pos = s.find('-');
    
  string s1(s.begin(),s.begin()+pos);
  string s2(s.begin()+pos+1,s.end());
   
  if(s1.size() ==11 || s2.size()==11) //王炸
  {
       if(s1.size() == 11)
           cout<s2[0]?s1:s2);
       else if(s1.size() !=7)
           cout<compre.find(f2))
      cout<

2.4注意事项

  1. 对string类函数的运用:
      int count1 = count(s1.begin(),s1.end(),' ');
      int count2 = count(s2.begin(),s2.end(),' ');
  1. string f1 = s1.substr(0,s1.find(' '));
          string f2 = s2.substr(0,s2.find(' '));
    

    substr可以快速得到首牌

    string compre("345678910JQKA2jokerJOKER");
    

    创建一个表来比较相同类型值的大小

  • 相关阅读:
    商家WIFI码项目全解析
    php程序设计的基本原则
    使用 OGG 21c 遇到的几个问题
    洛谷P1223 排队接水
    基于51单片机的篮球计分器设计
    一行代码为特定状态绑定SwiftUI视图动画
    linux内核中的I2C
    mysql主从复制与读写分离
    webpack分环境打包(生产/开发两套打包)
    在CentOS7中安装MySQL数据库
  • 原文地址:https://blog.csdn.net/yin_ming_hui/article/details/127098818