每日一题 | day10(井字棋 | 密码强度等级)
Posted WhiteShirtI
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一题 | day10(井字棋 | 密码强度等级)相关的知识,希望对你有一定的参考价值。
选择题
1、32位系统中,定义 ** a[3][4],则变量占用内存空间为()
A 4
B 48
C 192
D 12
正确答案 B:这是指变量占用多少空间,并非指针,sizeof(a)=3* 4 * 4=12
2、求函数返回值,输入x=9999
int func(int x){
int count=0;
while (x)
{
count++;
x=x&(x-1);//与运算
}
return count;
}
A 8
B 9
C 10
D 12
正确答案 A:这道题其实求的就是一个数字二进制中1的个数,9999转化为二进制就是10 0111 0000 1111,共有8个1,所以答案为1
3、执行下面语句后的输出为
int I=1;
if(I<=0)
printf("****\\n") ;
else
printf("%%%%\\n");
A %%
B ****
C 有语法错,不能正确执行
D %%%%
正确答案 A:要输出特殊字符需要在前面加上%表示转义后面一个特殊字符
编程题
题目1:
解题思路:
玩家胜出的方式
总结下来有3种获胜方式
1、一行数据加起来的结果为列数
2、一列数据加起来的结果为行数
3、两个对角线相加结果为行数
虽然牛客上的测试用例只有3*3的棋盘,但是为了加深理解,我们写出可以应对任何大小棋盘的代码
代码:代码简单,以贴注释
class Board {
public:
bool checkWon(vector<vector<int> > board)
{
int row = board.size();//行
int col = board[0].size();//列
int sum = 0;
//1、一行数据加起来的结果为列数
for (int i = 0; i < row; ++i)
{
sum = 0;
for (int j = 0; j < col; ++j)
{
//列变行不变,求一行
sum += board[i][j];
}
if (sum == col)//一行数据加起来的结果为列数
return true;
}
//2、一列数据加起来的结果为行数
for (int j = 0; j < col; ++j)
{
sum = 0;
for (int i = 0; i < row; ++i)
{
//行变列不变,求一列
sum += board[i][j];
}
if (sum == row)//一列数据加起来的结果为行数
return true;
}
//3、两个对角线相加结果为行数
//正对角线
sum = 0;
for (int i = 0; i < row; ++i)
{
sum += board[i][i];
}
if (sum == row)//正对角线相加结果为行数
return true;
//反对角线
sum = 0;
for (int i = 0; i < row; ++i)
{
sum += board[i][row - i - 1];
}
if (sum == row)//反对角线相加结果为行数
return true;
return false;
}
};
题目2:
代码:题目简单,就是麻烦,请有耐心!
#include <iostream>
#include <string>
using namespace std;
//大写字母
bool isCapital(const char& ch)
{
return ch>='A'&& ch<='Z';
}
//小写字母
bool isLowercase(const char& ch)
{
return ch>='a' && ch<='z';
}
//特殊符号
bool isF(const char& ch)
{
if (ch >= 33 && ch <= 47)
return true;
else if (ch >=58 && ch <=64)
return true;
else if (ch >=91 && ch<=96)
return true;
else if (ch >=123 && ch<=126)
return true;
return false;
}
int main()
{
string passwd;
while (getline(cin, passwd))
{
int bcNum = 0; //大写字母
int scNum = 0; //小写字母
int dNum = 0; //数字
int fNum = 0; //特殊符号
int sum = 0; //等级
for (const auto& ch : passwd)
{
if (isCapital(ch))
++bcNum;
else if (isLowercase(ch))
++scNum;
else if (isdigit(ch))
++dNum;
else if (isF(ch))
++fNum;
}
//1、密码长度
if (passwd.size() <= 4)
sum+=5;
else if (passwd.size() > 4 && passwd.size()<=7)
sum+=10;
else if (passwd.size() >= 8)
sum +=25;
//2、字母
if ((bcNum >= 1 && scNum == 0) || (bcNum == 0 && scNum >= 1))
sum += 10;
else if (bcNum >= 1 && scNum >= 1)
sum+=20;
//3、数字
if (dNum == 1)
sum+=10;
else if (dNum > 1)
sum+=20;
//4、符号
if (fNum == 1)
sum+=10;
else if (fNum > 1)
sum+=25;
//5、奖励
if ((bcNum >= 1 ||scNum >=1) && dNum >=1 && fNum == 0)
sum+=2;
else if (bcNum >= 1 && scNum >=1 && dNum >=1 && fNum >= 1)
sum += 5;
else if ((bcNum >= 1 ||scNum >=1) && dNum >=1 && fNum >= 1)
sum+=3;
//最后的评分标准
if (sum >= 90)
cout << "VERY_SECURE" << endl;
else if (sum >=80)
cout << "SECURE" << endl;
else if (sum >=70)
cout << "VERY_STRONG" << endl;
else if (sum >=60)
cout << "STRONG" << endl;
else if (sum >=50)
cout << "AVERAGE" << endl;
else if (sum >=25)
cout << "WEAK" << endl;
else
cout << "VERY_WEAK" << endl;
}
return 0;
}
以上是关于每日一题 | day10(井字棋 | 密码强度等级)的主要内容,如果未能解决你的问题,请参考以下文章