DS|静态查找

news2024/11/24 20:40:12

题目一: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.coloradmin.cn/o/1360930.html

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

相关文章

SpringBoot如何返回页面

前提 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>hello</title> </head> <body> 你好&#xff01;初学者&#xff0c;我是SpringBoot的简单启动页面&#xff01; </body>…

数据结构之绪论

一个著名公式&#xff1a; 程序数据结构算法 非数值计算&#xff1a;无法用数学的公式或方程来描述 描述非数值计算问题的数据模型不是数学方程&#xff0c;而是诸如表&#xff0c;树和图之类的具有逻辑关系的数据 数据结构&#xff1a;是一门研究非数值计算的程序设计中计算机…

【AIGC-图片生成视频系列-6】SSR-Encoder:用于主题驱动生成的通用编码器

目录 一. 贡献概述 二. 方法详解 a) 训练阶段 b) 推理生成阶段&#xff1a; 三. 综合结果 四. 注意力可视化 五. 选择性主题驱动图像生成 六. 人体图像生成 七. 可推广到视频生成模型 八. 论文 九. 个人思考 稳定扩散&#xff08;Stable Diffusion&#xff09;模型可…

OpenShift 4 - 使用 Model Serving 运行模型

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在 OpenShift 4.14 RHODS 2.50 的环境中验证 说明&#xff1a;请先根据《OpenShift 4 - 部署 OpenShift AI 环境&#xff0c;运行 AI/ML 应用&#xff08;视频&#xff09;》一文完成 OpenShift AI 环境的…

域名流量被劫持怎么办?如何避免域名流量劫持?

随着互联网不断发展&#xff0c;流量成为线上世界的巨大财富。然而一种叫做域名流量劫持的网络攻击&#xff0c;将会在不经授权的情况下控制或重定向一个域名的DNS记录&#xff0c;导致用户在访问一个网站时&#xff0c;被引导到另一个不相关的网站&#xff0c;从而劫持走原网站…

简单介绍Java 的内存泄漏

java最明显的一个优势就是它的内存管理机制。你只需简单创建对象&#xff0c;java的垃圾回收机制负责分配和释放内存。然而情况并不像想像的那么简单&#xff0c;因为在Java应用中经常发生内存泄漏。 本教程演示了什么是内存泄漏&#xff0c;为什么会发生内存泄漏以及如何预防…

C# 使用命名管道进行网络进程间通信

目录 写在前面 代码实现 服务端代码 客户端代码 调用示例 写在前面 使用 NamedPipeServerStream 和 NamedPipeClientStream 类&#xff0c;实现命名管道方式的网络通讯&#xff0c;支持跨网络和多个服务器实例的全双工通信、基于消息的通信以及客户端模拟&#xff1b;需要…

力扣:15.三数之和

1.做题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2.做题前须&#xff1a; 两数之和降低复杂度&#xff1a; 1.问题描述&#xff1a;一个数组中找到两个数字之和是taeget 例如&#xff1a;[2,7,11,15,19,21],target30 2.解法一&#xff1a;暴力枚举时间复…

权威认可!甄知科技猪齿鱼产品荣获信创产品评估证书

近日&#xff0c;依据《信息技术应用创新产品评估规范 第1部分&#xff1a;应用软件》&#xff08;T/SSIA 2001-2022&#xff09;&#xff0c;经过严格评估&#xff0c;甄知科技旗下自主研发的猪齿鱼数智化开发管理平台 V2.0.0&#xff0c;通过信创测试认证&#xff0c;获得上海…

java基于SSM的毕业生就业管理系统+vue论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本毕业生就业管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信…

UE4运用C++和框架开发坦克大战教程笔记(十四)(第43~45集)

UE4运用C和框架开发坦克大战教程笔记&#xff08;十四&#xff09;&#xff08;第43~45集&#xff09; 43. 单个加载 UObject 功能获取资源 URL 链接实现异步加载单个 UObject 类型资源 44. 批量加载 UObject 功能测试加载单个 UObject 资源批量加载多个同类的 UObject 资源 45…

跟着小德学C++之日志记录

嗨&#xff0c;大家好&#xff0c;我是出生在达纳苏斯的一名德鲁伊&#xff0c;我是要立志成为海贼王&#xff0c;啊不&#xff0c;是立志成为科学家的德鲁伊。最近&#xff0c;我发现我们所处的世界是一个虚拟的世界&#xff0c;并由此开始&#xff0c;我展开了对我们这个世界…

VS2017 搭建opencv工程

VS2017 搭建opencv工程 opencv在处理图像方面具有很强的能力&#xff0c;在使用opencv之前先需要造好轮子。 1、opencv 官网 &#xff0c;下载对应的资源文件包。 根据自身选择。下载包之后&#xff0c;解压。分为build和sources source目录下分别存放&#xff1a; modules: …

Java面试项目推荐,异构数据源数据流转服务DatalinkX

前言 作为一个年迈的夹娃练习生&#xff0c;每次到了春招秋招面试实习生时都能看到一批简历&#xff0c;十个简历里得有七八个是写商城或者外卖项目。 不由得想到了我大四那会&#xff0c;由于没有啥项目经验&#xff0c;又想借一个质量高点的项目通过简历初筛&#xff0c;就…

Pytest的测试报告——Allure

一、html-report测试报告 html-report测试报告。是pytest下基本的测试报告。要使用pytest-html测试报告&#xff0c;就要确保python版本在3.6及以上即可。本身pytest所提供的测试结果汇总&#xff0c;是基于控制台的文本输出形式。 pytest-html是基于HTML格式实现的测试报告的…

三、C语言分支与循环知识点补充——随机数生成

本章分支结构的学习内容如下&#xff1a; 三、C语言中的分支与循环—if语句 (1) 三、C语言中的分支与循环—关系操作符 (2) 三、C语言中的分支与循环—条件操作符 与逻辑操作符(3) 三、C语言中的分支与循环—switch语句&#xff08;4&#xff09;分支结构 完 本章循环结构的…

Python 中的==操作符 和 is关键字

Python是一种功能强大的通用编程语言&#xff0c;提供了各种比较值和对象的方法。其中包括操作符和is关键字&#xff0c;它们的用途不同&#xff0c;但由于它们有时可以达到相同的目的&#xff0c;所以经常会被混淆。在本文中&#xff0c;我们将深入研究和is之间的区别&#xf…

解决:ModuleNotFoundError: No module named ‘bs4’

解决&#xff1a;ModuleNotFoundError: No module named ‘bs4’ 文章目录 解决&#xff1a;ModuleNotFoundError: No module named bs4背景报错问题报错翻译报错位置代码报错原因解决方法方法一&#xff0c;直接安装方法二&#xff0c;手动下载安装方法三&#xff0c;编译安装…

odoo17 | 视图字段验证约束

前言 前一章介绍了向模型添加一些业务逻辑的能力。现在我们可以将按钮链接到业务代码&#xff0c;但是我们如何防止用户输入错误的数据呢?例如&#xff0c;在我们的房地产模块中&#xff0c;没有什么可以阻止用户设置负预期价格。 Odoo提供了两种方法来设置自动验证的不变量…

Spring学习 Spring IOC

创建工程&#xff1a; 2.1.程序的耦合 耦合&#xff1a;耦合指的就是对象之间的依赖关系。对象之间的耦合越高&#xff0c;维护成本越高。 案例&#xff1a;没有引入IOC容器时系统的Web层、业务层、持久层存在耦合 /*** 持久层实现类*/ public class UserDaoImpl implements U…