首页 > 编程语言 >C++U5-12-阶段测评练习

C++U5-12-阶段测评练习

时间:2023-12-31 19:55:57浏览次数:29  
标签:10 12 vis U5 C++ int tm && 1000

练习题目如下

1

 2

 3

4

 5

 6

 

 7

 编程题1

 

【算法分析】
可以发现如果一个格子中的一条边是周长的一部分,那么要么它是边界,要么它的两边是 1 和 0。因此可以遍历网格,找到每个陆地的格子,并判断它的四条边哪些是周长的一部分。

【参考代码】
#include<bits/stdc++.h>
using namespace std;

int a[1009][1009];
int dir[4][2] = { -1,0,0,1,1,0,0,-1 };
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];
    }
    int ans = 0;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            if (a[i][j]) {
                for (int k = 0; k < 4; k++) {
                    int x = i + dir[k][0], y = j + dir[k][1];
                    if (x<1 || x>n || y<1 || y>m || !a[x][y]) ans++;
                }
            }
        }
    }
    cout << ans;
    return 0;
}
View Code

编程题2

 广搜解决

【算法分析】
从 Q 到 W 最少需要的步数,可以考虑广搜。广搜的每一步都是去选择四位数当中的某一位进行改变,同时又需要改变之后的数是素数。如果在广搜的过程中判断素数,那时间复杂度会很高,因此可以先预处理出每个数是不是素数(这里用的是埃氏筛,当然用 nsqrt(n) 的算法时间也是允许的)。

【参考代码】
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e4 + 9;
bool prime[maxn];
int vis[maxn]; //vis[i]表示从Q到i需要的次数
void init() {  //埃氏筛素数
    prime[1] = 1;
    for (int i = 2; i < maxn; i++) {
        for (int j = 2 * i; j < maxn; j += i) prime[j] = 1;
    }
}
int bfs(int Q, int W) {
    memset(vis, -1, sizeof(vis)); //用-1表示从Q到不能到i,多组数据,每次需要初始化
    queue<int> q;
    q.push(Q);
    vis[Q] = 0;  //Q到Q的次数是0
    while (q.size()) {
        int r = q.front();
        q.pop();
        if (r == W) return vis[W];
        for (int i = 0; i < 10; i++) {
            //个位
            int tm = r - r % 10 + i;
            if (prime[tm] == 0 && vis[tm] == -1 && tm >= 1000) {  //题目说改变后的数要在1000~9999范围内
                q.push(tm);
                vis[tm] = vis[r] + 1;
            }
            //十位
            tm = r - (r / 10 % 10) * 10 + i * 10;
            if (prime[tm] == 0 && vis[tm] == -1 && tm >= 1000) {
                q.push(tm);
                vis[tm] = vis[r] + 1;
            }
            //百位
            tm = r - (r / 100 % 10) * 100 + i * 100;
            if (prime[tm] == 0 && vis[tm] == -1 && tm >= 1000) {
                q.push(tm);
                vis[tm] = vis[r] + 1;
            }
            //千位
            tm = r - (r / 1000 % 10) * 1000 + i * 1000;
            if (prime[tm] == 0 && vis[tm] == -1 && tm >= 1000) {
                q.push(tm);
                vis[tm] = vis[r] + 1;
            }
        }
    }
    return 0;
}
int main() {
    init();
    int _;
    cin >> _;
    while (_--) {
        int Q, W;
        cin >> Q >> W;
        cout << bfs(Q, W) << '\n';
    }
    return 0;
}
View Code

 

 

本节课作业讲解视频

链接:https://pan.baidu.com/s/1hd3HG-NafZNQVV08tkQaRA?pwd=0c9g
提取码:0c9g

 

标签:10,12,vis,U5,C++,int,tm,&&,1000
From: https://www.cnblogs.com/jayxuan/p/17937921

相关文章

  • 12.31每日总结
    实验三:JFinal极速开发框架实验一、实验要求 根据参考资料,学习JFinal极速开发框架的使用并如下任务: 任务一:了解Maven及其使用方法,总结其功能作用(占20%) 任务二:学习JFinal框架,基于Maven建立JFinal工程,并对JFinal框架功能进行总结介绍(占30%) 任务三:基于JFinal完成一个简单的学......
  • C++U4-第11课-综合练习
    学习目标 贪心算法 [导弹拦截] 【算法分析】首先考虑第一问,即序列中的最长不上升子序列。令g为以i结尾的最长不上升子序列的值,那么可以枚举g1​~gi−1,若aj​≤ai​,则gi​=max(gi​,gj+1​),否则gi​=max(gi​,g......
  • C++入门-命名空间、引用、函数重载
    引言:C++是C的一个超集,即C++继承了C语言的全部特性。C++不仅包含了C的关键字、语法和语义,还增加了一些新的特性。例如命名空间、引用、函数重载等,本片博客旨在向大家分享C++相较于C语言,增加的一些新的特性。1.命名空间namespace我们知道,在C语言中编写程序时,有时会存在标识符名与标准......
  • 2023-2024-1 20231312 《计算机基础与程序设计》第14周学习总结
    作业信息这个作业属于哪个课程<班级的链接>2023-2024-1-计算机基础与程序设计|-这个作业要求在哪里<作业要求链接>2023-2024-1计算机基础与程序设计第6周作业|这个作业的目标《C语言程序设计》第13章|作业正文作业链接教材学习内容总结《C》第十三章文......
  • 【C/C++】通过下面的工作来改进String类声明(即将String1.h升级为String2.h)。 a. 对+运
    通过下面的工作来改进String类声明(即将String1.h升级为String2.h)。a.对+运算符进行重载,使之可将两个字符串合并成一个。b.提供一个Stringlow()成员函数,将字符串中所有的字母字符转换为小写(别忘了cctype系列字符函数)。c.提供String()成员函数,将字符串中所有字母字符转换成大......
  • JavaWebDay12
    登录认证登录功能通过写sql语句判断账号密码输入后是否有数据返回  登录校验即访问一个网址时判断是否登录了,不可以绕过其登录界面1.会话技术企业开发主要使用令牌技术JWT令牌最典型的应用场景就是登录认证生成先引入依赖,后调用工具类 解析 时间为毫秒......
  • 【环境配置】vscode配置C C++开发和调试环境
    【环境配置】vscode配置CC++开发和调试环境首先区分一些基本概念,其中部分内容可能有所出入,同时本文截至2023/12/31,更多的详细区别,请查阅官方文档MinGW,MinimalistGNUforWindows,前身为mingw32,是一个用于创建MicrosoftWindows应用程序的免费开源软件开发环境。包括GNU编译器......
  • 12月读书笔记
    此外,书中还深入研究了敏捷开发中的一些关键概念,如迭代开发、用户故事、优先级排序等。这些概念构成了敏捷方法的核心框架,通过它们的灵活运用,团队能够更好地应对项目中的不确定性和变化。在实践方面,书中对一些具体的工具和技术也进行了介绍。例如,它详细讨论了测试驱动开发(TDD)的实......
  • 云锵投资 2023 年收益统计及 12 月简报
    年度统计本月是本年度最后一月,对本年的各组合进行了年度的收益统计:量化基金,少量超额。量化股票,Beta1.5倍的情况下,只下跌了4.81%,算是还凑合的成绩。今年,个人权益投资,整体没有Alpha,属于与指数陪玩。在持股数方面,相对年初加仓了23.68%(去年该数值是95.16%,本不应该加仓那么......
  • 代码随想录算法训练营第12天 | 树的遍历
    (本合集全部为Go语言实现)相关文章链接:递归遍历迭代遍历统一迭代法相关视频链接:Leetcode94状态:实现过程中的难点:迭代法的模拟过程比较难想个人写法递归方式funcinorderTraversal(root*TreeNode)[]int{varres[]intinorderTraversal0(root,&res)return......