DS|静态查找

题目一:DS静态查找 -- 顺序查找

题目描述:

给出一个队列和要查找的数值,找出数值在队列中的位置,队列位置从1开始

要求使用带哨兵的顺序查找算法

输入要求:

第一行输入n,表示队列有n个数据
第二行输入n个数据,都是正整数,用空格隔开
第三行输入t,表示有t个要查找的数值
第四行起,输入t个数值,输入t行

输出要求:

每行输出一个要查找的数值在队列的位置,如果查找不成功,输出字符串error

输入样例:

8
33 66 22 88 11 27 44 55
3
22
11
99

输出样例:

3
5
error

代码示例:

#include <iostream>
#include <vector>
#include <queue>
using namespace std;int sequenceSearch(int arr[], int key, int n) {int i = n;arr[0] = key;//设置哨兵while (arr[i] != key) i--;return i;
}int main() {int n;int array[10010];cin >> n;for (int i = 1; i <= n; i++) cin >> array[i];int t;cin >> t;while (t--) {int k;cin >> k;int index = sequenceSearch(array, k, n);if (index) cout << index << endl;else cout << "error" << endl;}
}

题目二:DS静态查找 -- 折半查找

题目描述:

给出一个队列和要查找的数值,找出数值在队列中的位置,队列位置从1开始

要求使用折半查找算法

输入要求:

第一行输入n,表示队列有n个数据
第二行输入n个数据,都是正整数,用空格隔开
第三行输入t,表示有t个要查找的数值
第四行起,输入t个数值,输入t行

输出要求:

每行输出一个要查找的数值在队列的位置,如果查找不成功,输出字符串error

输入样例:

8
11 22 33 44 55 66 77 88
3
22
88
99

输出样例:

2
8
error

代码示例:

#include <iostream>
#include <vector>
#include <queue>
using namespace std;int binarySearch(int arr[], int l, int r, int key) {while (l < r) {int mid = l + r >> 1;if (arr[mid] >= key) r = mid;else l = mid + 1;}return l;
}int main() {int n;int array[10010];cin >> n;for (int i = 1; i <= n; i++) cin >> array[i];int t;cin >> t;while (t--) {int num;cin >> num;int index = binarySearch(array, 1, n, num);if (array[index] != num) cout << "error" << endl;else cout << index << endl;}
}

题目三:DS静态查找 -- 顺序索引查找

题目描述:

给出一个队列和要查找的数值,找出数值在队列中的位置,队列位置从1开始

要求使用顺序索引查找算法,其中索引表查找和块内查找都采用不带哨兵、从头开始的顺序查找方法。

输入要求:

第一行输入n,表示主表有n个数据
第二行输入n个数据,都是正整数,用空格隔开
第三行输入k,表示主表划分为k个块,k也是索引表的长度
第四行输入k个数据,表示索引表中每个块的最大值
第五行输入t,表示有t个要查找的数值
第六行起,输入t个数值,输入t行

输出要求:

每行输出一个要查找的数值在队列的位置和查找次数,数据之间用短划线隔开,如果查找不成功,输出字符串error

输入样例:

18
22 12 13 8 9 20 33 42 44 38 24 48 60 58 74 57 86 53
3
22 48 86
6
13
5
48
40
53
90

输出样例:

3-4
error
12-8
error
18-9
error

代码示例:

#include <iostream>
#include <vector>
#include <queue>
using namespace std;int main() {int n;int array[1010];cin >> n;for (int i = 1; i <= n; i++) cin >> array[i];int x;cin >> x;int index[100], maxnum[100];for (int i = 1; i <= x; i++) cin >> maxnum[i];int pos = 2, maxindex = 1;index[1] = 1;for (int i = 2; i <= x; i++) {for (int j = 1; j < n; j++) {if (array[j] > maxnum[maxindex]) {index[pos] = j;maxindex++;pos++;}}}int t;cin >> t;while (t--) {int num;cin >> num;int cnt = 0;int startpos = 0;for (int i = 1; i <= x; i++) {cnt++;if (num <= maxnum[i]) {startpos = index[i];break;}}if (!startpos) {cout << "error" << endl;continue;}for (int i = startpos; i <= n; i++) {cnt++;if (num == array[i]) {cout << i << "-" << cnt << endl;break;}else if (i == n) {cout << "error" << endl;}}}
}

题目四:DS静态查找 -- 折半查找求平方根

题目描述:

假定输入y是整数,我们用折半查找来找这个平方根。在从0到y之间必定有一个取值是y的平方根,如果我们查找的数xy的平方根小,则x2<y,如果我们查找的数xy的平方根大,则x2>y,我们可以据此缩小查找范围,当我们查找的数足够准确时(比如满足|x2-y|<0.00001),就可以认为找到了y的平方根。

比如求5的平方根x,则x一定满足0<=x<=5,取x为(5+0)/2=2.5,因为2.5的平方为6.25>5,所以x一定小于2.5,也即x满足0<=x<=2.5,取x为1.25,以此类推

最后求得5的平方根为2.236

输入要求:

第1行输入一个整数n(<100),表示有n个数

从第2行起到第n+1行输入n个整数

输出要求:

输出n个数的平方根,精确到小数点后三位。

输入样例:

2
13
5

输出样例:

3.606
2.236

代码示例:

#include <iostream>
#include <cmath>
#include <algorithm>
#include <iomanip>
using namespace std;const double eps = 1e-8;   // eps 表示精度,取决于题目对精度的要求int main(){int t;cin >> t;while (t--) {double n;cin >> n;double l, r;if (n >= 1) l = 1, r = n;else if (n > 0) l = 0, r = 1;else if (n <= -1) l = n, r = -1;else l = -1, r = 0;while (r - l > eps){double mid = (l + r) / 2;if (pow(mid, 2) >= n) r = mid;else l = mid;}cout << fixed << setprecision(3) << l << endl;}
}

题目五:DS静态查找 -- 两个有序序列的中位数

题目描述:

已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列A​0​​,A​1​​,⋯,A​N−1​​的中位数指A​(N−1)/2​​的值,即第⌊(N+1)/2⌋个数(A​0​​为第1个数)。

只需考虑中位数唯一的情况

4

输入要求:

输入分三行。第一行给出序列的公共长度N(0<N≤100000),随后每行输入一个序列的信息,即N个非降序排列的整数。数字用空格间隔。

输出要求:

在一行中输出两个输入序列的并集序列的中位数。

输入样例:

5
1 3 5 7 9
2 3 4 5 6

输出样例:

4

代码示例:

#include <iostream>
#include <cmath>
#include <algorithm>
#include <iomanip>
using namespace std;void quick_sort(int q[], int l, int r){if (l >= r) return;int i = l - 1, j = r + 1, x = q[(l + r) / 2];while (i < j){do i++; while (q[i] < x);do j--; while (q[j] > x);if (i < j) swap(q[i], q[j]);}quick_sort(q, l, j), quick_sort(q, j + 1, r);
}int main() {int n;cin >> n;int array[100];for (int i = 0; i < 2 * n; i++)cin >> array[i];quick_sort(array, 0, 2 * n - 1);int center = (2 * n - 1) / 2;cout << array[center] << endl;}

题目六:DS静态查找 -- 链表的有序构建和查找

题目描述:

单链表结点的存储结构包含两部分:数据、下一结点指针(默认为空)。

单链表包含头结点,存储实际数据的结点位置从1开始。

现输入一批无序的整数队列,编写程序完成以下要求

1)构建单链表并且把数据按递增顺序插入到链表中,并且统计非空指针发生变化的次数。

例如在初始只包含头结点的单链表中,依次插入3和2

当把3插入时,是头结点的next指针发生变化,初始头结点的next指针是空的,现在指向3的结点,所以不计入指针变化次数。

当把2插入时,它是插入到头结点和3结点之间,这时候头结点的next指针从指向3变成指向2,因此这次计入指针变化次数。

总之,如果是把一个空的next指针指向新的结点,则不计入变化次数;如果是把一个非空next指针修改指向新结点则计入变化次数。

2)实现对单链表的元素查找。输入一个链表位置,返回该位置对应的数据。如果位置非法则输出提示信息,看样例。

要求:必须使用单链表结构实现上述要求,并且不能用第三方算法库或容器类对象

输入要求:

第一行:第一个数字n表示样本数目,其后跟n个样本。

第二行:查找测试次数m 后跟m个待查找的位置。

输出要求:

第一行输出构建链表过程中,非空指针变化的总次数,格式看样本

第二行输出单链表创建后,从头到尾依次输出链表中元素数据

第三行到第n+1行,对每个查找位置,若结点存在,输出结点数据;否则输出error

输入样例:

6 1 8 5 2 4 3
4 0 2 10 6

输出样例:

非空指针变化4次
1 2 3 4 5 8
error
2
error
8

代码示例:

#include<iostream>
#include<cmath>
#include<iomanip>
#include<algorithm>
#include<cstring>
using namespace std;struct Node {int data;Node* next;Node() :data(-1), next(nullptr) {}Node(int e) :data(e), next(nullptr) {}
};class list {
private:    int num = 0;Node* head;int size;
public:list() {size = 0;head = new Node();}~list() {}void Insert(int x) {Node* tmp = new Node(x);Node* s;s = head;while (1) {if (s->next == NULL) {s->next = tmp;break;}if (s->next->data > x) {num++;tmp->next = s->next;s->next = tmp;break;}s = s->next;}size++;}void Display() {Node* s;s = head;for (int i = 0; i < size - 1; i++) {s = s->next;cout << s->data << " ";}s = s->next;cout << s->data << endl;}int Find(int x) {Node* s;s = head;if (x > size)  return -1;else {for (int i = 0; i < x; i++) s = s->next;return s->data;}}int getNum() { return num; }
};int main() {int n;cin >> n;list l;int x;while (n--) {cin >> x;l.Insert(x);}cout << "非空指针变化" << l.getNum() << "次" << endl;l.Display();int m, result;cin >> m;for (int i = 0; i < m; i++) {cin >> x;result = l.Find(x);if (result == -1) cout << "error" << endl;else cout << result << endl;}return 0;
}

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

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

相关文章

CAN通信的基本原理与实现方法

一. CAN协议概念 1.1 CAN 协议简介 CAN 是控制器局域网络 (Controller Area Network) 的简称&#xff0c;它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的&#xff0c;并最终成为国际标准(ISO11519以及ISO11898),是国际上应用最广泛的现场总线之一。差异点如下&…

手拉手springboot3整合mybatis-plus多数据源

环境介绍 技术栈 springbootmybatis-plusmysql 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 17 Spring Boot 3.1.7 dynamic-datasource 3.6.1 mybatis-plus 3.5.3.2 加入依赖 <dependency><groupId>com.baomidou</groupId><arti…

苹果macOS 14.3开发者预览版Beta 2发布 修复API会意外失败的问题

1 月 4 日消息&#xff0c;苹果向 Mac 电脑用户推送了 macOS 14.3 开发者预览版 Beta 2 更新&#xff08;内部版本号&#xff1a;23D5043d&#xff09;&#xff0c;本次更新距离上次发布隔了 22 天。 macOS Sonoma 14.3 Beta 2 主要以修复 BUG、提高安全性为主。根据苹果官方更…

如何做一个炫酷的Github个人简介(3DContribution)

文章目录 前言3D-Contrib第一步第二步第三步第四步第五步第六步 前言 最近放假了&#xff0c;毕设目前也不太想做&#xff0c;先搞一点小玩意玩玩&#xff0c;让自己的github看起来好看点。也顺便学学这个action是怎么个事。 3D-Contrib 先给大家看一下效果 我的个人主页&am…

面试算法96:字符串交织

题目 输入3个字符串s1、s2和s3&#xff0c;请判断字符串s3能不能由字符串s1和s2交织而成&#xff0c;即字符串s3的所有字符都是字符串s1或s2中的字符&#xff0c;字符串s1和s2中的字符都将出现在字符串s3中且相对位置不变。例如&#xff0c;字符串"aadbbcbcac"可以由…

trino-435:dynamic catalog数据库存储代码实现

一、dynamic catalog数据库存储源码分析 dynamic catalog的实现主要涉及到两个类&#xff1a;CoordinatorDynamicCatalogManager、WorkerDynamicCatalogManager&#xff0c;这两个类的详细信息如下&#xff1a; 这两个类主要提供了对catalog的增删改查的方法。trino-435源码中…

​三子棋(c语言)

前言&#xff1a; 三子棋是一种民间传统游戏&#xff0c;又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏规则是双方对战&#xff0c;双方依次在9宫格棋盘上摆放棋子&#xff0c;率先将自己的三个棋子走成一条线就视为胜利。但因棋盘太小&#xff0c;三子棋在很多时候会出现和…

推荐一款Apache开源的文档内容解析工具

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 hello&#xff0c;伙伴们&#xff0c;在闲暇的时候逛了一下掘金&#xff0c;发现了这样的一篇文章&#xf…

机器人相关知识

机器人学&#xff08;Robotics) 一些基础概念 位姿 位姿位置姿态 位姿的表示 刚体 刚性物体是一组粒子的集合&#xff0c;其中任意两个粒子之间的距离保持固定&#xff0c;不受物体运动或施加在物体上的力的影响。 “完全不可变形”的物体就是刚体。 刚体位置 刚性连杆 …

【网络技术】【Kali Linux】Wireshark嗅探(八)动态主机配置协议(DHCP)

一、实验目的 本次实验使用 Wireshark &#xff08;“网鲨”&#xff09;流量分析工具进行网络流量嗅探&#xff0c;旨在初步了解动态主机配置协议&#xff08;DHCP协议&#xff09;的工作原理。 二、DHCP协议概述 动态主机配置协议&#xff08; D ynamic H ost C onfigurat…

工智能基础知识总结--导出SVM要优化的问题

导出SVM要优化的问题 对于上图中这样一个二分类线性可分问题,期望找到一个分类超平面将正负类分开,SVM就是一个用来寻找这样的分类超平面的算法。 定义正负类的标签分别为1、-1,分类超平面的表达式为 f ( x ) = w T x + b f(x)=w^Tx+b

使用代理IP保护爬虫访问隐私数据的方法探讨

目录 前言 1. 获取代理IP列表 2. 随机选择代理IP 3. 使用代理IP发送请求 4. 处理代理IP异常 总结 前言 保护爬虫访问隐私数据是一个重要的安全问题。为了保障用户的隐私&#xff0c;很多网站会采取限制措施&#xff0c;如封禁IP或限制访问频率。为了绕过这些限制&#x…

宏电股份5G RedCap终端产品助力深圳极速先锋城市建设

12月26日&#xff0c;“全城全网&#xff0c;先锋物联”深圳移动5G-A RedCap助力深圳极速先锋城市创新发布会举行&#xff0c;宏电股份携一系列5G RedCap终端产品应邀参与创新发布会&#xff0c;来自全国5G生态圈的各界嘉宾、专家学者济济一堂&#xff0c;共探信息化数字化创新…

L1-078:吉老师的回归

题目描述 曾经在天梯赛大杀四方的吉老师决定回归天梯赛赛场啦&#xff01; 为了简化题目&#xff0c;我们不妨假设天梯赛的每道题目可以用一个不超过 500 的、只包括可打印符号的字符串描述出来&#xff0c;如&#xff1a;Problem A: Print "Hello world!"。 众所周知…

实验笔记之——服务器链接

最近需要做NeRF相关的开发,需要用到GPU,本博文记录本人配置服务器远程链接的过程,本博文仅供本人学习记录用~ 连上服务器 首先先确保环境是HKU的网络环境(HKU AnyConnect也可)。伙伴已经帮忙创建好用户(第一次登录会提示重新设置密码)。用cmd ssh链接ssh -p 60001 <u…

计算机毕业设计 SpringBoot的中小型制造企业质量管理系统 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

Linux基础——进程地址空间

1. 地址空间的验证 之前我们在学习语言时&#xff0c;曾知道有下面这张图 对于这个图我们可以用下面的代码验证 运行后我们可以发现 其对应关系如下 我们使用fork函数&#xff0c;来分别对父子进程中的g_val进行修改&#xff0c;即 运行后我们可以发现 在子进程修改了g_val后…

矩阵的乘法

首先矩阵的乘法定义如下&#xff1a; #include <stdio.h> int main() { int i 0; int j 0; int arr[20][20] { 0 }; int str[20][20] { 0 }; int s[20][20] { 0 }; int n1 0; int n2 0; int m2 0; int z 0; int m1 0;…

LeetCode 每日一题 Day 3334(hard)35 ||二进制枚举/单调栈/链表遍历

2397. 被列覆盖的最多行数 给你一个下标从 0 开始、大小为 m x n 的二进制矩阵 matrix &#xff1b;另给你一个整数 numSelect&#xff0c;表示你必须从 matrix 中选择的 不同 列的数量。 如果一行中所有的 1 都被你选中的列所覆盖&#xff0c;则认为这一行被 覆盖 了。 形式…

认识jmeter接口测试工具!

jmeter简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试&#xff0c;但后来扩展到其他测试领域。 下载 下载地址&#xff1a;​​​​​​Apache JMeter - Download Apache JMeter 安装 由于Jmeter…