【C#】螺钉和螺母问题

2023-11-06 19:30

本文主要是介绍【C#】螺钉和螺母问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

螺钉与螺母问题

做题时,遇到了这个问题,顺手记录一下。(~ ̄▽ ̄)~

问题描述

假设我们有n个直径各不相同的螺钉以及n个相应的螺母。我们一次只能比较一对螺钉和螺母,来判断螺母是大于螺钉 、小于螺钉还是正好适合螺钉。然而,我们不能拿两个螺母作比较,也不能拿两个螺钉作比较。我们的问题是要找到每一对匹配的螺钉和螺母。为该问题设计一个算法,它的平均效率必须属于集合θ(nlogn)。

思路

这个问题比较迷惑的地方就是螺母之间、螺钉之间不能比较。但说真的,螺钉是与螺母是相互对应的,螺钉与螺母比实际上就可以看做是螺母之间在比。nlogn又让人想到快排,很明显这就是是两组快排。

  1. 从螺钉中选出一个,对螺母们进行划分成三部分,比这个螺钉小的、大的和相等的。
  2. 取出第一步相等的螺母,对螺钉们进行相同的划分。
  3. 对小的部分,和大的部分,进行递归操作。

代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ZExercise
{ class Program{static void Swap(ref int[]a  ,int i ,int j) {int temp = a[i];a[i] = a[j];a[j] = temp;}static int Sort(ref int[] a, ref int i, ref int j, int pivot){while (i < j) //这里按照题目,是n个直径各不相同的螺钉,否则无法跳出循环{while (a[i] < pivot) { i++; }while (a[j] > pivot) { j--; } Swap(ref a, i, j);  }i++;j--;return a[i - 1];}static void Match(ref int[] nuts,ref int[] bolts,int low ,int high) {int pivot = nuts[ (low + high )/2]; int i = low;int j = high; int mbolt = Sort(ref bolts,ref i, ref j,pivot);// 利用螺母找螺钉,并划分成三部分pivot = mbolt;//用找到螺钉作为枢纽i = low;j = high;Sort(ref nuts, ref i, ref j, pivot);// 利用螺钉找螺母,并划分成三部分if (i < high) { Match(ref nuts,ref bolts,i ,high); }if (j > low) { Match(ref nuts, ref bolts, low, j); }}static void Show(int[] a,int len) {for (int i = 0; i < len; i++){Console.Write(a[i] + " ");}Console.WriteLine("");}static void Main(string[] args){int[] nuts = { 0,2,1,10,3,4,13,9,8,6};int[] bolts = { 13,4,3,2,6,10,1,9,8,0};Match(ref nuts,ref bolts,0,9);Console.WriteLine("nuts:");Show(nuts,10);Console.WriteLine("bolts:");Show(bolts, 10);Console.ReadKey();}}
}

运行结果
在这里插入图片描述

水平有限,如有错误,请多包涵 (〃‘▽’〃)

这篇关于【C#】螺钉和螺母问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/358615

相关文章

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

C#利用Free Spire.XLS for .NET复制Excel工作表

《C#利用FreeSpire.XLSfor.NET复制Excel工作表》在日常的.NET开发中,我们经常需要操作Excel文件,本文将详细介绍C#如何使用FreeSpire.XLSfor.NET... 目录1. 环境准备2. 核心功能3. android示例代码3.1 在同一工作簿内复制工作表3.2 在不同

Python绘制TSP、VRP问题求解结果图全过程

《Python绘制TSP、VRP问题求解结果图全过程》本文介绍用Python绘制TSP和VRP问题的静态与动态结果图,静态图展示路径,动态图通过matplotlib.animation模块实现动画效果... 目录一、静态图二、动态图总结【代码】python绘制TSP、VRP问题求解结果图(包含静态图与动态图