【笔试刷题训练】day_10

我想说

每天坚持一点点,坚持带来大改变
今天是刷题的第_10天,加油!


一、选择题

在这里插入图片描述

C++中不可以被重载的运算符:

  • 成员访问运算符:.,用于访问类成员
  • 成员的指针访问运算符: .* 用于访问类成员的指针 ,如obj.*a:访问的是成员a的地址
  • 域作用限定符:::
  • 三目运算符:?:
  • 长度运算符sizeof

在这里插入图片描述

MyClass[5]:创建一个5个对象的数组,所以调用5次构造函数
MyClass* b[6] :创建一个指针数组,数组每一个元素是MyClass* 类型,所以不会调用构造函数
所以答案选 B

在这里插入图片描述

初始化列表的初始化顺序 取决于 成员变量的声明顺序
题目中a先声明,b后声明。所以初始化列表中无论a和b谁写在前,都是a先初始化,b后初始化
所以一直都输出"ab" ,选C

在这里插入图片描述

对于空类,并不是0字节,在主流的编译器中(VS系列,gcc系列等),将空类的大小设置为1,用于标识该类创建的对象是存在的!
对于非主流编译器,是不一定的。

在这里插入图片描述
在这里插入图片描述

二、编程题

1. 井字棋

👉 题目链接

井字棋(N*N)赢的规则就是:

  • 某一行都是1
  • 某一列都是1
  • 主对角线都是1
  • 副对角线都是1

只要满足其中一种情况,就是赢

所以很简单,只需要依次取检查 行、列、主对角线、副对角线即可

class Board {
  public:
    bool checkWon(vector<vector<int> > board) {
        // write code here
        //赢的规则:一横排 || 一竖排 || 主对角线 || 副对角线 全是1 那么就赢了
        size_t row = board.size();
        //检查行
        for (size_t i = 0; i < row; ++i) {
            int sum = 0;
            for (size_t j = 0; j < row; ++j) {
                sum += board[i][j];
            }
            if (sum == row) {
                return true;
            }
        }
        //检查列
        for (size_t i = 0; i < row; ++i) {
            int sum = 0;
            for (size_t j = 0; j < row; ++j) {
                sum += board[i][j];
            }
            if (sum == row) {
                return true;
            }
        }

        //主对角线
        int sum = 0;
        for (size_t i = 0; i < row; ++i) {
            sum += board[i][i];
        }
        if (sum == row) return true;

        //副对角线
        sum = 0;
        for (size_t i = 0; i < row; ++i) {
            sum += board[i][row - i];
        }
        if (sum == row)    return true;

        return false;
    }
};

2.密码强度等级

👉 题目链接

这题根据题目意思来即可,没什么难度

#include<iostream>
#include<string>
using namespace std;
int main()
{
    //输入
    string password;
    cin >> password;
    
    int points = 0;
    int num_cnt = 0;
    int alpha_cnt = 0;
    int Uper_cnt = 0;
    int symbol_cnt = 0;
    //遍历
    for(auto i : password)
    {
        //小写字母
        if(i>='a' && i<='z')    ++alpha_cnt;
        //大写字母
        if(i>='A' && i<='Z')    ++Uper_cnt;
        //数字字符
        if(isdigit(i))    ++num_cnt;
        //符号字符
        if(i>=0x21 && i<=0x2F ||
           i>=0x3A && i<=0x40 || 
           i>=0x5B && i<=0x60 || 
           i>=0x7B && i<=0x7E)
            ++symbol_cnt;
    }
    
    //评分//

    //长度评分
    if(password.size()>=8)
    {
        points+=25;
    }
    else if(password.size()>=5)
    {
        points+=10;
    }
    else 
    {
        points += 5;
    }
    //数字评分
    if(num_cnt ==1)
    {
        points+=10;
    }
    else if(num_cnt >1)
    {
        points+=20;
    }
    //字母评分
    if(alpha_cnt >0 && Uper_cnt>0)
    {
        points+=20;
    }
    else if(alpha_cnt>0 || Uper_cnt>0)
    {
        points+=10;
    }
    //符号评分
    if(symbol_cnt==1)
    {
        points+=10;
    }
    else if(symbol_cnt>1)
    {
        points+=25;
    }
    
    //奖励
    if(num_cnt>0 && alpha_cnt>0 && symbol_cnt>0 && Uper_cnt>0)    points+=5;
    else if(num_cnt>0 && symbol_cnt>0 && (alpha_cnt>0 || Uper_cnt>0)) points+=3;
    else if(num_cnt >0 && (alpha_cnt>0 || Uper_cnt>0))    points+=2;
    
    //评判
    if(points >= 90)    cout << "VERY_SECURE"<<endl;
    else if(points>=80)    cout << "SECURE"<<endl;
    else if(points>=70)    cout << "VERY_STRONG"<<endl;
    else if(points>=60)    cout << "STRONG"<<endl;
    else if(points>=50)    cout << "AVERAGE"<<endl;
    else if(points>=25)    cout << "WEAK"<<endl;
    else    cout << "VERY_WEAK"<<endl;
    
  
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2021狮子歌歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值