算法基础(三)(模拟)

1.模拟算法介绍:

  • 模拟算法通过模拟实际情况来解决问题,一般容易理解但是实现起来比较复杂,有很多需要注意的细节,或者是一些所谓很“麻烦”的东西。
  • 模拟题一般不涉及太难的算法,一般就是由较多的简单但是不好处理的部分组成的,考察选手的细心程度和整体的逻辑思维。
  • 一般为了使得模拟题写的逻辑清晰一些,经常会写比较多的小函数来帮助解题,例如int和string的相互转换回文串的判断日期的转换各种特殊条件的判断等等。

2.例题讲解:

题号:lanqiao OJ 549

1.扫雷

 该题要考虑边界情况,开设两个数组对a数组扫描,用b数组记录,根据题意一步步写就好,注意扫到雷时将该位置跳过(更为详细的步骤可以看12.题目:编号549 扫雷)

#include<bits/stdc++.h>
using namespace std;
const int N=150;
int a[N][N],b[N][N];
int main(){
  int n,m;
  cin>>n>>m;
  for(int i=1;i<=n;++i){
    for(int j=1;j<=m;++j){
      cin>>a[i][j];
    }
  }

  for(int i=1;i<=n;++i){
    for(int j=1;j<=m;++j){
      //有雷变9,该位置则不扫描,跳过
      if(a[i][j]){
        b[i][j]=9;
        continue;
      }
      //扫描地雷,边界问题用max函数和min函数解决,不需要罗列条件
      for(int _i=max(1,i-1);_i<=min(n,i+1);++_i){
        for(int _j=max(1,j-1);_j<=min(m,j+1);++_j){
          if(a[_i][_j]){
            b[i][j]++;
          }
        }
      }

    }
  }

  for(int i=1;i<=n;++i){
    for(int j=1;j<=m;++j){
      cout<<b[i][j]<<' ';
    }
    cout<<'\n';
  }
  return 0;
}

 题号:lanqiao OJ 551

2.灌溉

与上题类似,还是设两个数组对a扫描,用b记录,多了一步将a与b同步,最后输出ans (更为详细的步骤可以看13.题目:编号511 灌溉)

#include<bits/stdc++.h>
using namespace std;
const int N=105;
bool a[N][N],b[N][N];
int main(){
  int n,m;
  cin>>n>>m;
  int t;
  cin>>t;
  while(t--){
    int c,r;
    cin>>c>>r;
    a[c][r]=1;
  }
  int k;cin>>k;
  while(k--){
    for(int i=1;i<=n;++i){
      for(int j=1;j<=m;++j){
        if(a[i][j]){
          b[i][j]=b[i-1][j]=b[i+1][j]=b[i][j-1]=b[i][j+1]=1;
        }
      }
    }

    for(int i=1;i<=n;++i){
      for(int j=1;j<=m;++j){
        a[i][j]=b[i][j];
      }
    }

  }
  int ans=0;
  for(int i=1;i<=n;++i){
    for(int j=1;j<=m;++j){
      if(a[i][j]){
        ans++;
      }
    }
  }
  cout<<ans<<'\n';
  return 0;
}

 题号:lanqiao OJ 498

3.回文日期

 ###该题难在思维,写的时候要保持清醒的头脑,缜密的逻辑,想好达成该目的要有什么操作,一定要自己好好想一想

要编写这么几个函数:

  1. 从int转换为指定位数的string的函数
  2. 从string转换为int的函数
  3. 判断闰年的函数
  4. 判断日期是否合法的函数
  5. 判断字符串是否是回文的函数
  6. 判断字符串是否是ABABBABA型回文的函数

(更为详细的步骤可以看14.题目:编号498 回文日期) 

#include<bits/stdc++.h>
using namespace std;
//字符串类型转换为整型函数
int s2i(string x){
  int res=0;
  for(auto & i : x )res=res*10+i-'0';
  return res;
}
//整型转换为字符串类型函数(缺位自动补0)
string i2s(int x,int w){
  string res;
  while(x){
    res+=x%10+'0';
    x/=10;
  }
  while(res.length()<w){
    res+='0';
  }
  reverse(res.begin(),res.end());
  return res;
}
//判断是否是闰年
bool isLeapYear(int year){
  return (year%4==0&&year%100)||(year%400==0);
}
//判断日期是否合法
bool isok(int year,int month,int day){
  int nums[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  if(isLeapYear(year))nums[2]=29;
  return day<=nums[month];
}
//判断是否是回文1
bool isPa1(string s){
  for(int i=0;i<s.length()/2;++i){
    if(s[i]!=s[s.length()-1-i])return false;
  }
  return true;
}
//判断是否是回文2
bool isPa2(string s){
  if(!isPa1(s))return false;
  return s[0]==s[2]&&s[1]==s[3];
}
int main(){
  string s;cin>>s;
  bool ans1=false,ans2=false;
  int year=s2i(s.substr(0,4)),month=s2i(s.substr(4,2)),day=s2i(s.substr(6,2));
  for(int i=year;i<=9999;++i){
    for(int j=1;j<=12;++j){
      if(i==year&&j<month)continue;
      for(int k=1;k<=31;++k){
        if(i==year&&j==month&&k<=day)continue;
        //是否合法
        if(!isok(i,j,k))continue;
        //拼接回去
        string date=i2s(i,4)+i2s(j,2)+i2s(k,2);
        //判断1
        if(!ans1&&isPa1(date)){
          cout<<date<<'\n';
          ans1=true;
        }
        //判断2
        if(!ans2&&isPa2(date)){
          cout<<date<<'\n';
          ans2=true;
        }
      }
    }
  }
  return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

buuctf_web_knife

题目&#xff1a; 哥们&#xff0c;名字叫白给的shell&#xff0c;嘻嘻。本题主要练习一下蚁剑工具 激动的心&#xff0c;颤抖的手&#xff0c;我打开了蚁剑。在空白处右击 然后&#xff0c;输入URL&#xff0c;密码&#xff08;所以上面说白给&#xff09;是Syc 添加后点进…

【Java程序设计】【C00322】基于Springboot的高校竞赛管理系统(有论文)

基于Springboot的高校竞赛管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的高校竞赛管理系统&#xff0c;本系统有管理员、老师、专家以及用户四种角色&#xff1b; 管理员&#xff1a;首页、个人中心、管…

1 数据分析概述与职业操守

1、 EDIT数字化模型 E——exploration探索 &#xff08;是什么&#xff09; 业务运行探索&#xff1a;探索关注企业各项业务的运行状态、各项指标是否合规以及各项业务的具体数据情况等。 指标体系——目标&#xff08;O&#xff09;、策略&#xff08;S&#xff09;、指标&a…

jenkins插件下载失败bug

如果遇到安装jenkins插件经常失败并报以下类似错误&#xff0c;很可能是因为jenkins国外官方插件地址下载速度非常慢&#xff0c;我们可以修改为国内插件地址。 java.io.IOException: Failed to load: SCM API Plugin (scm-api 676.v886669a_199a_a_) - Jenkins (2.361.4) or h…

cmake如何将源文件按照指定的组织方式进行分组,在IDE例如vistual stdio或者xcode项目工程文件中展示和管理这些源文件

1、我们先来看下面的一个项目的结构 TestGroup工程下面的main.cpp同级的有两个文件夹&#xff0c;到时候我们想在IDE比如xcode或者visual stdio2019中也显示这样的结构怎么弄呢(答案是用cmake中的source_group函数) 2、假如没有用source_group生成的xcode工程是怎么样的&#…

map和set的简单介绍

由于博主的能力有限&#xff0c;所以为了方便大家对于map和set的学习&#xff0c;我放一个官方的map和set的链接供大家参考&#xff1a; https://cplusplus.com/ 在初阶阶段&#xff0c;我们已经接触过STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque&#x…

2.29作业

1.编写链表&#xff0c;链表里面随便搞点数据 使用 fprintf 将链表中所有的数据&#xff0c;保存到文件中 使用 fscanf 读取文件中的数据&#xff0c;写入链表中 //main.c#include "link_list.h" int main() {link_p Lcreate_head();insert_tail(L,12);insert_tai…

【小沐学QT】QT学习之信号槽使用

文章目录 1、简介2、代码实现2.1 界面菜单“转到槽”方法2.2 界面信号槽编辑器方法2.3 QT4.0的绑定方法2.4 QT5.0之后的绑定方法2.5 C11的方法2.6 lamda表达式方法 结语 1、简介 在GUI编程中&#xff0c;当我们更改一个小部件时&#xff0c;我们通常希望通知另一个小程序。更普…

如何测试抖音

如何测试抖音 其实&#xff0c;现在的面试题&#xff0c;对于基础的测试用例和场景考察越来越多样化&#xff0c;就跟这样一道面试题。 面试官一上来就是跟我说下怎么测试刷抖音&#xff1f; 很多人一上来就开始各种UI测试&#xff0c;兼容性测试&#xff0c;易用性测试&#…

SWOT分析法是什么?

SWOT法又称态势分析法&#xff0c;是一种通过分析对象内外部因素从而得出战略结论的分析方法。核心理念在于通过对影响因素进行分类梳理&#xff0c;再通过聚合考虑来得出结论。主要就是四个维度&#xff1a;优势&#xff08;Strengths&#xff09;、劣势&#xff08;Weaknesse…

深度学习介绍与环境搭建

深度学习介绍与环境搭建 慕课大学人工智能学习笔记&#xff0c;自己学习记录用的。&#xff08;赋上连接&#xff09; https://www.icourse163.org/learn/ZUCC-1206146808?tid1471365447#/learn/content?typedetail&id1256424053&cid1289366515人工智能、机器学习与…

C++ 二分查找函数lower_bound() 和 upper_bound()

lower_bound() 和 upper_bound() 是 C 标准库中的函数&#xff0c;用于在有序序列中查找目标值的插入位置。 lower_bound() 函数&#xff1a; lower_bound() 函数返回一个迭代器&#xff0c;指向第一个不小于目标值的元素位置。 template<class ForwardIt, class T> F…

怎么根据输入的网站url获得域名及主机ip地址(代码)

好久没更新csdn了。24年二月最后一天&#xff0c;写篇文章吧&#xff0c;作为24年第一篇文章&#xff0c;是不是最后一篇我就不知道了。 最近在写端口扫描的代码&#xff0c;输入是网站的url&#xff0c;输出是开放的端口。 首先就要将输入的网站url转化为域名和主机ip地址&a…

方格分割644--2017蓝桥杯

1.用dfs解决&#xff0c;首先这题的方格图形就很像一个走迷宫的类型&#xff0c;迷宫想到dfs&#xff0c;最中心点视为起点&#xff0c;起点有两个小人在这个方格里面对称行动&#xff0c;直到走出迷宫&#xff08;一个人走出来了另一个人就也走出来了&#xff0c;而走过的点会…

0代码自动化测试:RF 框架实现企业级 UI 自动化测试!

RobotFramework框架可以作为公司要做自动化 但是又不会代码的一种临时和紧急情况的替代方案&#xff0c;上手简单。 前言 现在大家去找工作&#xff0c;反馈回来的基本上自动化测试都是刚需&#xff01;没有自动化测试技能&#xff0c;纯手工测试基本没有什么市场。 但是很多人…

入栏需看——《python》专栏介绍专栏目录

《python》专栏介绍&专栏目录 专栏地址&#xff1a;点击跳转 专栏导航如下&#xff1a; 文章目录 &#x1f330;基础篇&#x1f330;自动篇&#x1f330;自动篇-办公&#x1f330;自动篇-运维 &#x1f330;分享篇&#x1f330;题库篇&#x1f381;产品篇&#x1f330;可视…

虚拟机看不到共享文件夹

johnjohn-virtual-machine:/mnt/hgfs$ cat /etc/issue Ubuntu 20.04.6 LTS \n \l 看下是否挂载 johnjohn-virtual-machine:/mnt/hgfs$ vmware-hgfsclient FPGAs_AdaptiveSoCs_Unified_2023.2_1013_2256 xilinx 取消挂载 johnjohn-virtual-machine:/mnt/hgfs$ sudo umount /mn…

网络——DHCP服务器、DNS服务器实验

网络——DHCP服务器、DNS服务器实验 一、DHCP服务器实验 DHCP——动态主机配置协议&#xff0c;用来管理ip地址的分配。网络中的每台计算机都有至少一个ip地址。在Windows网络连接对话框中可以设置成自动获取ip地址&#xff0c;这样主机作为DHCP client就可以自动从DHCP serve…

算法 - 【二叉树中的第 K 大层和】

二叉树中的第 K 大层和 题目示例1示例2 分析代码 题目 给你一棵二叉树的根节点 root 和一个正整数 k 。树中的层和是指同一层上节点值的总和。返回树中第 k 大的层和&#xff08;不一定不同&#xff09;。如果树少于 k 层&#xff0c;则返回 -1 。注意&#xff0c;如果两个节点…

前端mock数据 —— 使用Apifox mock页面所需数据

前端mock数据 —— 使用Apifox 一、使用教程二、本地请求Apifox所mock的接口 一、使用教程 在首页进行新建项目&#xff1a; 新建项目名称&#xff1a; 新建接口&#xff1a; 创建json&#xff1a; 请求方法&#xff1a; GET。URL&#xff1a; api/basis。响应类型&#xff1…
最新文章