当前位置: 首页 > news >正文

【算法实验】实验2

实验2-1 二分搜索

【问题描述】给定一个包含 n 个元素有序的(升序)整型数组 nums 和一个目标值 target,要求实现搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。题目保证nums中的所有元素都不重复。

【输入形式】输入的第1行中有1个数字n,表示数组的长度;第2行中有n个数字,表示数组的元素;第3行中有1个数字,表示要搜索的目标值。
【输出形式】输出1行中有1个数字,表示目标值在数组中出现的下标。
【样例输入1】

6

-5 0 1 5 10 12

0
【样例输出1】

1
【样例说明1】

0出现在nums中并且下标为1

【样例输入2】

6

-5 0 1 5 10 12

6
【样例输出1】

-1
【样例说明1】

6不存在于nums中因此输出-1

题目本身有序,无须排序

code1:

//实验2-1 二分
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int x;
int a[N];
int query(int low , int high)
{while(low < high){int mid = (low + high) >> 1;if(a[mid] == x){return mid;}else if(a[mid] > x){high = mid;}else{low = mid + 1;	}}return -1;
}
int main()
{int n;cin >> n ;for(int i = 0 ; i < n ; i ++ ){cin >> a[i];}cin >> x;cout << query(0,n-1);return 0;} 

个人更喜欢code2的风格:

//实验2-1 二分
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int x;
int a[N];
int query(int low , int high)
{while(low < high){int mid = (low + high) >> 1;if(x <= a[mid]) high = mid;else low = mid + 1;}return ( a[low] == x ? low : -1);
}
int main()
{int n;cin >> n ;for(int i = 0 ; i < n ; i ++ ){cin >> a[i];}cin >> x;cout << query(0,n-1);return 0;} 

实验2-2 归并排序

MergeSort

【问题描述】给定一个长度为n的整数数组nums,要求必须使用【归并排序】的方法将该数组升序排序。

【输入形式】输入的第1行中有1个数字n,表示数组的长度;第2行中有n个数字,表示数组的元素

【输出形式】输出1行中有n个数字,表示按照升序排序后的数组,数字之间使用空格分割。

【样例输入】

5

35 28 9 87 56

【样例输出】

9 28 35 56 87

【说明】

1<=n<=10^4

0<=nums[i]<=10^5

#include<iostream>
using namespace std;
const int N = 1e4 + 10;
int a[N];void Merge(int l,int q,int r)
{int tmp[N];//临时数组 int n = r - l + 1; //长度 int k = 0; //临时数组Index int left = l; //左区间的第一个 int right = q + 1; //右区间的第一个 while(left <= q && right <= r ){tmp[ k ++ ] = a[left] <= a[right] ? a[left++] : a[right++];}while(left<=q)tmp[ k ++ ] = a[ left ++ ];while(right<=r)tmp[ k ++ ] = a[ right ++];//放过来 for(int i = 0 ; i < n ; i ++ ){a[l+i] = tmp[i];}
}
void MergeSort(int l,int r)
{if(l == r) return;else{int q = ( l + r ) / 2;MergeSort( l , q );MergeSort( q + 1 , r );Merge(l,q,r);}
}
int main()
{int n;cin >> n;for(int i = 0 ; i < n ; i ++ ){cin >> a[i];}MergeSort(0,n-1);for(int i = 0 ; i < n ; i ++ ){cout << a[i] <<" ";}return 0;
}

实验2-3 寻找数组中的第k小元素

【问题描述】给定一个长度为n的整数数组nums和整数k,输出数组中的第k小元素。要求不能对数组排序,使用分治的思想求解。

【输入形式】输入的第1行中有1个数字n,表示数组的长度;第2行中有n个数字,表示数组的元素;第3行中有1个数字k。

【输出形式】输出1行中有1个数字,表示数组中的第k小元素。
【样例输入】

6

3 2 1 4 6 5

2
【样例输出】

2
【说明】
1<=k<=n<=10^4

10^-5<=nums[i]<=10^5

PS:这题我是真想排序输出啊

44是大量推导得出来的

递归法:

#include <algorithm>
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int arr[N];
void quicksort(int arr[], int left, int right) {  if (left >= right) {  return;  }  int i = left, j = right, pivot = arr[left];  while (i < j) {  while (i < j && arr[j] >= pivot) {  j--;  }  if (i < j) {  arr[i++] = arr[j];  }  while (i < j && arr[i] < pivot) {  i++;  }  if (i < j) {  arr[j--] = arr[i];  }  }  arr[i] = pivot;  quicksort(arr, left, i - 1);  quicksort(arr, i + 1, right);  
}
int main(){int n,k;  cin >> n;for (int i=1;i<=n;++i){cin >> arr[i];}cin >> k;quicksort(arr, 1, n); printf("%d\n",arr[k]);return 0; 
}

实验2-4 整数因子分解问题

问题描述:

 大于1 的正整数n 可以分解为:n=x1*x2*…*xm。

例如,当n=12 时,共有8 种不同的分解式:

12=12;

12=6*2;

12=4*3;

12=3*4;

12=3*2*2;

12=2*6;

12=2*3*2;

12=2*2*3 。

编程任务:

  对于给定的正整数n,编程计算n 共有多少种不同的分解式。

数据输入:

  由文件input.txt 给出输入数据。第一行有1 个正整数n (1≤n≤2000000000)。

结果输出:

将计算出的不同的分解式数输出到文件output.txt 。

输入文件示例          输出文件示例

input.txt            output.txt

 12                      8

动态规划:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int a[N],dp[N];
int k=0;
//初始化函数,找出n的所有约数 
void init(int n)
{k = 0;int i = 1;for(i = 1; i < sqrt(n) ; i ++ ){if( n % i == 0 ) //如果是n的约数 存储 {a[ k ++ ] = i;a[ k ++ ] = n / i;}}if( i * i == n){a[ k ++ ] = i;}
}
void solve(int n){dp[0] = 1;for(int i = 1; i < k ; i ++ ){dp[i] = 0;for(int j = 0; j < i ; j ++ ){if( a[i] % a[j] ==0) //还能分解 {dp[i] += dp[j]; //+}}}
}
int main()
{int n;cin >> n;init(n); //初始化n的约数//记得排序sort( a , a + k );solve(n);cout << dp[k-1];return 0; 
}

实验2-5 矩阵乘法

【问题描述】要求必须使用【分治策略】计算两个矩阵的乘法。nxm阶的矩阵A乘以mxk阶的矩阵B得到的矩阵C是nxk阶的。

【输入形式】输入的第一行中有3个整数n, m,k,表示A矩阵是n行m列,B矩阵是m行k列。接下来的n行,每行m个数字,表示矩阵A中的元素。接下来的m行,每行k个元素,表示矩阵B中的元素。

【输出形式】输出矩阵C,一共n行,每行k个整数,整数之间以一个空格分开。

【样例输入】

3 2 3

1 1

1 1

1 1

1 1 1

1 1 1 

【样例输出】

2 2 2 

2 2 2 

2 2 2 

【说明】

1<=n,m,k<=100

矩阵中每个元素的绝对值<=1000

#include<iostream>
using namespace std;
const int N = 110;
int juz1[N][N];
int juz2[N][N];
int res[N][N];
int main()
{int x , y , k;cin >> x >> k >> y;//inputfor(int i = 1 ; i <= x; i ++){for(int j = 1 ; j <= k ; j ++ ){cin >> juz1[i][j]; }}for(int i = 1 ; i <= k; i ++){for(int j = 1 ; j <= y ; j ++ ){cin >> juz2[i][j]; }}//calufor(int i = 1 ; i <= x ; i ++ ){for(int j = 1; j <= y ; j ++){for(int w = 1; w <= k ; w ++){res[i][j] += juz1[i][k] * juz2[k][j];}}}//outputfor(int i = 1 ; i <= x ; i ++ ){for(int j = 1; j <= y ; j ++ ){cout << res[i][j] << " ";}cout <<"\n";}return 0;
}

实验2-6 邮局选址问题

问题描述:

  在一个按照东西和南北方向划分成规整街区的城市里,n 个居民点散乱地分布在不同的街区中。用x 坐标表示东西向,用y 坐标表示南北向。各居民点的位置可以由坐标(x,y) 表示。街区中任意2 点(x1,y1) 和(x2,y2) 之间的距离可以用数值|x1-x2|+|y1-y2| 度量。

居民们希望在城市中选择建立邮局的最佳位置,使n 个居民点到邮局的距离总和最小。

编程任务:

  给定n 个居民点的位置,编程计算n 个居民点到邮局的距离总和的最小值。

数据输入:

  由文件input.txt 提供输入数据。文件的第1 行是居民点数n,1<=n<=10000。接下来n 行是居民点的位置,每行2 个整数x 和y,-10000<=x,y<=10000。

结果输出:

  程序运行结束时,将计算结果输出到文件output.txt 中。文件的第1 行中的数是n 个居民点到邮局的距离总和的最小值。

输入文件示例               输出文件示例

input.txt                  output.txt

5                          10

1 2

2 2

1 3

3 -2

3 3

同货仓选址问题

code:

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 10;
const int INF = 0x7f7f7f;int avex,avey;
int dis(int x){return abs( avex - x ) ;
}
int xx[N],yy[N];
int main()
{int n;cin >> n;for(int i = 1 ; i <= n ; i ++ ){cin >> xx[i] >> yy[i];}sort( xx + 1 , xx + n + 1);sort( yy + 1 , yy + n + 1);avex = xx[ n/2 + 1];avey = yy[ n/2 + 1];int mindis = 0;for(int i = 1 ; i <= n ; i ++ ){mindis += dis(xx[i]) + dis(yy[i]);}cout << mindis;return 0;
}

相关文章:

【算法实验】实验2

实验2-1 二分搜索 【问题描述】给定一个包含 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target&#xff0c;要求实现搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。题目保证nums中的所有元素都不重复。 【…...

杂记:使用 mac 和 windows 以及编辑器的总结

Chrome 扩展 Grammarly 语法检查 DM Integration Module idm 下载扩展 JSON Formatter json 格式化查看 uBlock Origin Ad block 油猴 任意网站都可以使用的脚本管理工具 Mac 快捷键整理 截图到剪贴板 shift command control 4 (不按 shift 存储为文件) 切换输入法…...

vue2使用qiankun微前端(跟着步骤走可实现)

需求&#xff1a;做一个vue2的微前端&#xff0c;以vue2为主应用&#xff0c;其他技术栈为子应用&#xff0c;比如vue3&#xff0c;本文章只是做vue2一套的微前端应用实现&#xff0c;之后解决的一些问题。vue3子应用可以看我另一篇vue3vitets实现qiankun微前端子应用-CSDN博客…...

1.C语言基础知识

这里写目录标题 1.第一个C语言程序2.注释3.标识符4.关键字5.数据类型6.变量7.常量8.运算符9.输入输出输入输出 1.第一个C语言程序 C语言的编程框架 #include <stdio.h> int main() {/* 我的第一个 C 程序 */printf("Hello, World! \n");return 0; }2.注释 单行…...

路由黑洞和黑洞路由的区别

路由黑洞&#xff1a; 路由黑洞是一种现象&#xff0c;一般是在网络边界做汇总回程路由的时候产生的一种不太愿意出现的现象&#xff0c;就是汇总的时候有时会有一些不在内网中存在的网段&#xff0c;但是又包含在汇总后的网段中&#xff0c;如果在这个汇总的边界设备上同时还配…...

Golang 如何基于现有的 context 创建新的 context?

目录 基于现有的 context 创建新的 context 现有创建方法的问题 Go 1.21 中的 context.WithoutCancel 函数 Go 版本低于 1.21 该怎么办&#xff1f; 在 Golang 中&#xff0c;context 包提供了创建和管理上下文的功能。当需要基于现有的 context.Context 创建新的 context …...

【学习笔记】[AGC063E] Child to Parent

提供一个多项式做法。 分别设 f u , i , g u , i f_{u,i},g_{u,i} fu,i​,gu,i​表示以 u u u为根时&#xff0c; a u i a_ui au​i和 a u ≥ i a_u\ge i au​≥i的方案数&#xff0c;合并子树 v v v时&#xff0c;转移如下&#xff1a; f u , i ∑ f u , i − k r g v . k…...

sar 运行出错

手机上使用sar 使用sar工具报错 / # sar -I SUM 1 1 Cannot find the data collector (sadc) exec: No such file or directory Inconsistent input data解决方法&#xff1a;需要将 sadc sadf sar 三个bin同时推到/usr/bin/目录下 / # sar -I SUM 1 2 Linux 5.15.104-ab558…...

UE5 C++的TCP服务器与客户端

客户端.h 需要在Build.cs中加入模块:"Networking","Sockets","Json","JsonUtilities" // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include…...

nginx+lua配置,一个域名配置https,docker集群使用

没安装kua的先安装lua 没有resty.http模块的&#xff0c;许配置 nginxlua配置&#xff0c;一个域名配置https&#xff0c;docker集群使用&#xff0c;一个域名配置https管理整个集群 lua做转发&#xff08;方向代理&#xff09; 1、ad_load.lua文件 ngx.header.content_typ…...

jQuery 正则表达式 验证表单

文章目录 简介&#xff1a;什么是正则表达式以及作用&#xff1a;●文本框内容的验证&#xff1a;代码演示示例&#xff1a; 简介&#xff1a; jQuery Form插件是一个优秀的Ajax表单插件&#xff0c;可以非常容易地、无侵入地升级HTML表单以支持Ajax。jQuery Form有两个核心方法…...

如何使用SVN查看旧版本

和目录 第一步&#xff1a;打开SVN客户端 第二步&#xff1a;浏览历史版本 第三步&#xff1a;还原历史版本 结论 Subversion (缩写为SVN)是一种常用的版本控制系统&#xff0c;它可以帮助团队协作开发软件项目。除了基本的版本控制功能外&#xff0c;SVN还提供了许多其他功…...

使用 GitHub 远程仓库

使用 GitHub 远程仓库 GitHub 是最大的 Git 版本库托管商&#xff0c;是成千上万的开发者和项目能够合作进行的中心。 大部分 Git 版本库都托管在 GitHub&#xff0c;很多开源项目使用 GitHub 实现 Git 托管、问题追踪、代码审查以及其它事情。本篇文章主要带大家上手 GitHub …...

关键词提取

在自然语言处理领域中&#xff0c;处理海量文本信息的关键在于把用户关心的问题提取出来。而关键词是能够表达文档中心内容的词语&#xff0c;更是表达文档主题的最小单位。因此&#xff0c;文本关键词的提取对于文本信息的理解是至关重要的。 关键词提取是文本挖掘领域下的一个…...

web开发学习笔记(2.js)

1.引入 2.js的两种引入方式 3.输出语句 4.全等运算符 5.定义函数 6.数组 7.数组属性 8.字符串对象的对应方法 9.自定义对象 10.json对象 11.bom属性 12.window属性 13.定时刷新时间 14.跳转网址 15.DOM文档对象模型 16.获取DOM对象&#xff0c;根据DOM对象来操作网页 如下图…...

Vue Axios——前端技术栈

文章目录 基本介绍Vue是什么&#xff1f; MVVMVue的使用快速入门注意事项和使用细节 Vue 数据绑定机制分析数据单向渲染注意事项和细节 双向数据绑定事件绑定示例&#xff1a;注意事项和使用细节课后作业1课后作业2 修饰符示例 条件渲染/控制: v-if v-showv-if VS v-show课后作…...

九、Qt C++ 数据库开发

《一、QT的前世今生》 《二、QT下载、安装及问题解决(windows系统)》《三、Qt Creator使用》 ​​​ 《四、Qt 的第一个demo-CSDN博客》 《五、带登录窗体的demo》 《六、新建窗体时&#xff0c;几种窗体的区别》 《七、Qt 信号和槽》 《八、Qt C 毕业设计》 《九、Qt …...

力扣电话号码的组合

文章目录 题目说明做题思路代码实现代码解析 题目链接 题目说明 首先我们先分析一下这个题目题目中说呢先给出一个字符串这个字符串其实就是这个九键数字我们要按照要求将数字所代表的字符进行自由组合形成一个字符串并且这个字符串的长度和输入的数字字符串长度相同&#xff0…...

ZooKeeper 实战(五) Curator实现分布式锁

文章目录 ZooKeeper 实战(五) Curator实现分布式锁1.简介1.1.分布式锁概念1.2.Curator 分布式锁的实现方式1.3.分布式锁接口 2.准备工作3.分布式可重入锁3.1.锁对象3.2.非重入式抢占锁测试代码输出日志 3.3.重入式抢占锁测试代码输出日志 4.分布式非可重入锁4.1.锁对象4.2.重入…...

基于kubernetes部署MySQL主从环境

部署方式 通过部署mysql主从容器&#xff0c;配置主从pod之间数据同步。 配置数据库访问的密码 创建 Mysql 密码的 Secret [rootk8s-master1 master]# kubectl create secret generic mysql-password --namespaceapp --from-literalmysql_root_passwordroot secret/mysql-pas…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...