我想说
每天坚持一点点,坚持带来大改变
今天是刷题的第_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;
}