每日一题 | 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(井字棋 | 密码强度等级)的主要内容,如果未能解决你的问题,请参考以下文章

阿铭每日一题 day 4 20180114

《LeetCode之每日一题》:230.有效的井字游戏

每日一题 | day25(星际密码 | 树根)

老男孩教育每日一题-day59-Linux root 密码忘了,如何找回来?

华为机试题 HJ87密码强度等级

华为机试题 HJ87密码强度等级