每日练习-9

news2024/9/24 15:27:46

目录

1、井字棋

2、密码强度等级

3、二维数组中的查找

4.调整数组奇数偶数

5.旋转数组中的最小元素

6、替换空格


1、井字棋

解析:井字棋有四种情况表示当前玩家获胜,行全为1, 列全为1,主对角全为1,  副对角全为1。遍历board的每一行,每一列,每一条对角线,检查是否有连成一排的的棋子,如果有,返回True。如果遍历完没有找到连成一排的棋子,返回False。

代码如下:

class Board {
  public:
    bool checkWon(vector<vector<int> > board) {
        int sum = 0;
        int row = board.size();
        for (int i = 0; i < row; i++) {
            //先看每一行
            sum = 0;
            for (int j = 0; j < row; j++) {
                sum += board[i][j];
                if (sum == row) {
                    return true;
                }
            }
        }
        for (int j = 0; j < row; j++) {
            //再看每一列
            sum = 0;
            for (int i = 0; i < row; i++) {
                sum += board[j][i];
                if (sum == row) {
                    return true;
                }
            }
        }
        //检查主对角线的和是是否等于row
        sum = 0;
        for (int i = 0; i < row; i++) {
            sum += board[i][i];
        }
        if (sum == row)
            return true;
        //检查副对角线的和是是否等于row
        sum = 0;
        for (int i = 0; i < row; i++) {
            sum += board[i][row - i - 1];
        }
        if (sum == row)
            return true;
        return false;

    }
    // write code here
};

2、密码强度等级

解析:这一道题思路很简单,由于不同种类的字符得分不同,同可以对每一个维度进行单独判断,即对于长度,字母,数字,符号单独判断,最后把所有的单项值根据题目要求相加,输出对应的安全级别。

代码如下:

#include <iostream>
#include <string>
using namespace std;
int score_count(string& str) {
    int digit = 0, symbol = 0;
    int lower = 0, upper = 0, charc = 0;
    int size = 0, sum = 0;
    for (auto ch : str) {
        if (ch >= 'a' && ch <= 'z') {
            lower++;
            charc++;
        } else if (ch >= 'A' && ch <= 'Z') {
            upper++;
            charc++;
        } else if (ch >= '0' && ch <= '9') {
            digit++;
        } else if ((ch >= 0x21 && ch <= 0x2F) ||
                   (ch >= 0x3A && ch <= 0x40) ||
                   (ch >= 0x5B && ch <= 0x60) ||
                   (ch >= 0x7B && ch <= 0x7E)) {
            symbol++;
        }
    }
    size = str.size();
    if (size <= 4)
        sum += 5;
    else if (size <= 7)
        sum += 10;
    else
        sum += 25;
    if (lower > 0 && upper > 0)
        sum += 20;
    else if (lower == charc || upper == charc)
        sum += 10;
    if (digit == 1)
        sum += 10;
    else if (digit > 1)
        sum += 20;
    if (symbol == 1)
        sum += 10;
    else if (symbol > 1)
        sum += 25;
    if (lower > 0 && upper > 0 && digit > 0 && symbol > 0)
        sum += 5;
    else if ((lower > 0 || upper > 0) && digit > 0 && symbol > 0)
        sum += 3;
    else if ((lower > 0 || upper > 0) && digit > 0 && symbol == 0)
        sum += 2;
    return sum;
}
int main() {
    string str;
    while (cin >> str) {
        int score = score_count(str);
        if (score >= 90) {
            cout << "VERY_SECURE" << endl;
        } else if (score >= 80) {
            cout << "SECURE" << endl;
        } else if (score >= 70) {
            cout << "VERY_STRONG" << endl;
        } else if (score >= 60) {
            cout << "STRONG" << endl;
        } else if (score >= 50) {
            cout << "AVERAGE" << endl;
        } else if (score >= 25) {
            cout << "WEAK" << endl;
        } else {
            cout << "VERY_WEAK" << endl;
        }
    }
    return 0;
}

3、二维数组中的查找

解析:这是一个经典的算法问题,一种常见的方法是从二维数组的右上角或左下角开始,根据目标整数和当前元素的大小关系,逐步缩小查找范围,直到找到目标整数或者超出数组边界。这种方法的时间复杂度是O(m+n),其中m和n分别是二维数组的行数和列数。

代码如下:

class Solution {
  public:
    bool Find(int target, vector<vector<int> >& array) 
    {
        int row = array.size();
        int col = array[0].size();
        int i = 0;
        int j = col - 1;

        while (i < row && j > -1) 
        {
            if (array[i][j] == target) 
            {
                return true;
            } else if (array[i][j] > target) 
            {
                j--;
            } else if (array[i][j] < target)
             {
                i++;
            }
        }
        return false;
    }

};

4.调整数组奇数偶数

解析:这是一个数组的奇偶数分割问题,可以用双指针的方法来实现。双指针的方法是用两个变量分别指向数组的头部和尾部,然后同时向中间移动,每次移动时判断当前指向的元素是奇数还是偶数,如果是奇数就保持不变,如果是偶数就和另一个指针指向的元素交换位置,直到两个指针相遇或者交错为止。

代码如下:

class Solution {
public:
    
    vector<int> reOrderArrayTwo(vector<int>& array) 
    {
        int left=0;
        int right=array.size()-1;
        int term=0;
        while(left<right)
        {
            while(array[left]%2==1)
            {
                left++;
            }
            while(array[right]%2==0)
            {
                right--;
            }
            if(left<right)
            {
            term=array[left];
            array[left]=array[right];
            array[right]=term;
            }
        }
        return array;

    }
};

5.旋转数组中的最小元素

解析:旋转数组中的最小元素是一个常见的算法问题,可以用二分法来解决。二分法的思路是用两个指针分别指向数组的首尾,然后根据中间元素和右指针指向的元素的大小关系,缩小查找范围,直到找到最小元素或者两个指针相遇。

代码如下:

#include <iostream>
#include<vector>
using namespace std;

int main() {
    vector<int> arr;
    int n;
    while(cin>>n)
    {
        arr.push_back(n);
    }
    int left=0;
    int right=arr.size()-1;

    while(left<right)
    {
    int mid=left+(right-left)/2;


        if(arr[mid]>arr[right])
        {
            left=mid+1;

        }
        else if(arr[mid]<arr[right])
        {
            right=mid;

        }
        else right=right-1;
    }

    cout<<arr[left]<<endl;
    return 0;

}

6、替换空格

解析:

首先,我们需要遍历字符串s,找出其中有多少个空格,这样我们就可以计算出替换后的字符串长度。然后,我们需要从后往前修改字符串s,使用两个指针i和j,分别指向原字符串和新字符串的末尾。接下来,我们需要判断s[i]是否是空格,如果不是,就直接复制到s[j],然后i和j都向前移动一位;如果是,就在s[j]处依次填入’0’,‘2’和’%',然后i向前移动一位,j向前移动三位。最后,我们需要重复上述步骤,直到i和j相等为止,这样就完成了空格的替换。

代码如下:

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @return string字符串
     */
    string replaceSpace(string s) 
    {
        int count = 0;
        for (char c : s) {
            if (c == ' ') count++;
        }
        // 如果没有空格,直接返回
        if (count == 0) return s;
        // 计算替换后的字符串长度
        int len = s.length();
        int newLen = len + count * 2;
        // 从后往前修改字符串s,使用两个指针i和j
        int i = len - 1;
        int j = newLen - 1;
        // 扩充字符串s的容量
        s.resize(newLen);
        // 当i和j不相等时,循环执行
        while (i != j) 
        {
            // 如果s[i]不是空格,就复制到s[j],然后i和j都向前移动一位
            if (s[i] != ' ') 
            {
                s[j] = s[i];
                i--;
                j--;
            } else 
            {
                // 如果s[i]是空格,就在s[j]处依次填入'0','2'和'%',然后i向前移动一位,j向前移动三位
                s[j] = '0';
                s[j - 1] = '2';
                s[j - 2] = '%';
                i--;
                j -= 3;
            }
        }
        return s;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1074797.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pytorch学习------TensorBoard的使用

目录 简介使用方式1、单条曲线(scalar)2、多条曲线(scalars)3、直方图(histogram)4、图片(image)5、渲染(figure)6、网络(graph) 简介 建好一个神经网络&#xff0c;其实我们也不知道神经网络里头具体细节到底做了什么&#xff0c;要人工调试十分困难(就好比你无法想象出递归的…

Markdown文本编辑器常用操作介绍

文章目录 标题文本样式列表图片链接目录插入代码插入表格 背景说明 Markdown语言是国际杂志编辑以及许多写作者都广泛使用的写作语言它使用一些简单的符号&#xff08;* / > [] () #&#xff09;来标记文本格式其简洁的语法、优美的格式以及强大的软件支持深受广大网友的喜…

基于蝠鲼觅食优化的BP神经网络(分类应用) - 附代码

基于蝠鲼觅食优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于蝠鲼觅食优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.蝠鲼觅食优化BP神经网络3.1 BP神经网络参数设置3.2 蝠鲼觅食算法应用 4.测试结果…

Java @Override 注解

在代码中&#xff0c;你可能会看到大量的 Override 注解。 这个注解简单来说就是让编译器去读的&#xff0c;能够避免你在写代码的时候犯一些低级的拼写错误。 Java Override 注解用来指定方法重写&#xff08;Override&#xff09;&#xff0c;只能修饰方法并且只能用于方法…

自定义背景画词云图(中文)

背景 词云图还是挺需要用的吧&#xff0c;大量的词中&#xff0c;我们可以快速捕捉到高频的关键的词汇。 环境&#xff1a;python3 对csv文件里面某列所有字符串画词云图&#xff08;中文的字符&#xff09; 新安装环境&#xff1a; 1.下载中文字体SimHei.ttf&#xff0c;并放…

C++DAY41

#include <iostream>using namespace std;class Per { private:string name;int age;float* height;float* weight; public:Per(){cout << "Per::无参构造函数" << endl;}Per(string name,int age,float* height,float* weight):name(name),age(ag…

RustDay01——运行在线GitHub Rust环境

1.跟着教程进入GitHub教室 2. 授权确认后进入学习空间 3.点击链接进入在线平台 4.添加本机密钥对到GitHub 5. 安装依赖 我们使用在线的Linux试验平台&#xff0c;就自动帮我们clone好了仓库 我们直接在仓库目录执行 cargo install --force --path . 安装依赖 PS:其实刚开始…

Godot 添加信号

前言 Godot 里面C#和GDScirpt 的用法完全不一样&#xff0c;网上相关资料太少了。 什么是信号 信号分为信号源&#xff0c;触发&#xff0c;目的节点。信号源在某些条件下触发信号&#xff0c;比如按钮点击&#xff0c;鼠标悬停等事件 #mermaid-svg-wyr9ARVcBFmUUu8y {font-…

哈希传递原理

哈希传递只针对相同密码进行攻击。 NTLM认证流程 NTLM加密&#xff1a; admin -> hex(16进制编码) 61646d696e61646d696e-> Unicode 610064006d0069006e00610064006d0069006e00–>MD4209c6174da490caeb422f3fa5a7ae634 认证过程&#xff1a; 注意:challenge每次认证…

【C++】list基本接口+手撕 list(详解迭代器)

父母就像迭代器&#xff0c;封装了他们的脆弱...... 手撕list目录&#xff1a; 一、list的常用接口及其使用 1.1list 构造函数与增删查改 1.2list 特殊接口 1.3list 排序性能分析 二、list 迭代器实现&#xff08;重点难点&#xff09; 关于迭代器的引入知识&#xff1a…

项目管理入门指南:如何快速上手?

面对复杂的项目任务&#xff0c;如何入手项目管理呢&#xff1f;在项目管理过程中需要面对许多繁杂的问题以及复杂的流程&#xff0c;还涉及到与团队成员的沟通协作。如果单单依靠人的注意力与记忆&#xff0c;可能没有办法兼顾多个方面。一个靠谱好用的项目管理工具可以帮助您…

HTTPS建立连接的过程

HTTPS 协议是基于 TCP 协议的&#xff0c;因而要先建立 TCP 的连接。在这个例子中&#xff0c;TCP 的连接是在手机上的 App 和负载均衡器 SLB 之间的。 尽管中间要经过很多的路由器和交换机&#xff0c;但是 TCP 的连接是端到端的。TCP 这一层和更上层的 HTTPS 无法看到中间的包…

如何正确方便的理解双指针?力扣102 (二叉树的层序遍历)

双指针&#xff0c;顾名思义就是指针的指针。 在此之前我们需要先理解单指针 &#xff08;简称为指针&#xff09;。指针很简单&#xff0c;直接上例子&#xff1a;例&#xff1a;现有两个变量&#xff0c;a10,b20. 要求&#xff1a;交换他们的值&#xff0c;输出的结果应为a20…

操作系统 —— 进程篇

文章目录 进程的概念程序的概念进程控制块 PCB进程的组成进程状态进程状态转换 进程队列进程的组织进程控制内核的两大功能进程创建进程终止进程阻塞与唤醒进程切换 进程通信 进程的概念 进程是操作系统中的基本概念&#xff0c;用于描述正在运行的程序实例。 它是计算机系统…

GG-Net: 超声图像中乳腺病变分割的全局指导网络

ATTransUNet 期刊分析摘要贡献方法整体框架1. Global Guidance Block2. Spatial-wise Global Guidance Block3. Channel-wise Global Guidance Block4. Breast Lesion Boundary Detection Module 实验1. 对比实验2. 消融实验2.1 Ablation Analysis of our GG-Net2.2 Ablation A…

maven_修改项目名_修改模块名_复制模块_导入模块

修改模块名 1、删除.idea和.iml 2、修改gav(记得修改子模块) 复制模块名&修改模块名 1、复制文件并修改artifactId

(二)Web服务器之Linux多进程

一、基础概念 Linux操作系统一般由以下四个主要部分组成&#xff1a;内核、shell、文件系统和应用程序 。 内核&#xff08;Kernel&#xff09;&#xff1a;是操作系统的核心部分&#xff0c;负责管理系统的硬件资源、进程管理、内存管理、文件系统等。它直接与硬件交互&…

Java中的 try-finally 代码块的题目

class Test4 {int i 1;public static void main(String[] args) {System.out.println("i的值&#xff1a;" new Test4().test());}int test() {try {// 当 try 代码块执行 return 语句时&#xff0c;返回值已经被确定并保存下来&#xff0c;等待方法结束后返回。尽…

网络原理必知会

前言&#xff1a; 网络初始&#xff1a;对于网络有一个直观的大体的认识 网络编程&#xff1a;让我们真正通过代码感受网络通信程序 网络原理&#xff1a;进一步的理解网络是如何工作的&#xff0c;以理论为主&#xff0c;很多比较抽象的东西&#xff0c;同时这里也包含大量的面…

ssti 前置学习

python venv环境 可以把它想象成一个容器&#xff0c;该容器供你用来存放你的Python脚本以及安装各种Python第三方模块&#xff0c;容器里的环境和本机是完全分开的 创建venv环境安装flask #apt install python3.10-venv #cd /opt #python3 -m venv flask1 #cd /opt 选…