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

三元组的最短距离

前言

个人小记


一、简介

定义三元组(a,b, c)(a,b,c 均为正数)的距离 D=|a-b|+|b-c|+|c-a|。给定 3 个非空整数集合 S1, S2 ,S3, 按升序分别存储在 3 个数组中。请设计一个尽可能高效的算法,计算并输出所有可能的三元组(a, b, c)(a∈S1,b∈S2,c∈S3)中的最小距离。例如 S1={-1, 0, 9}, S2={-25,-10,10,11},S3={2,9,17,30,41},则最小距离为 2,相应的三元组为(9,10,9)。

二、代码

#include<stdio.h>
#include <stdlib.h>typedef struct Queue
{int *data;int size,count,head,tail;
}Queue;Queue* init_queue(int n)
{Queue* Q=(Queue*)malloc(sizeof(Queue));Q->data=(int*)malloc(sizeof(int)*n);Q->size=n;Q->head=0;printf("请输入元组的值:");for(int i=0;i<n;i++){scanf("%d",&(Q->data[i]));}Q->count=n;Q->tail=n-1;return Q;
}int pop(Queue* Q)
{if(Q->count==0){printf("队列为空,无法pop\n");return 0;}Q->count-=1;Q->head+=1;if(Q->head==Q->size)Q->head=0;return 1;
}int search(Queue* Q)
{if(Q->count==0){printf("队列为空,无法查看\n");return 0;}return Q->data[Q->head];
}void clear_queue(Queue* Q)
{if(Q==NULL)return ;free(Q->data);free(Q);return ;
}void swap(int *a,int *b)
{int t=*a;*a=*b;*b=t;return ;
}int Min(int a,int b,int c)
{if(a>b)swap(&a,&b);if(a>c)swap(&a,&c);return a;
}void func(Queue* a,Queue* b,Queue* c)
{int min=0x7fffffff;int d[3];while(a->count!=0&&b->count!=0&&c->count!=0){int ma=search(a),mb=search(b),mc=search(c);int M=abs(ma-mb)+abs(mb-mc)+abs(ma-mc);if(M<min){min=M;d[0]=ma,d[1]=mb,d[2]=mc;}int d=Min(ma,mb,mc);if(ma==d)pop(a);if(mb==d)pop(b);if(mc==d)pop(c);}printf("三元组的最小值为:%d\n",min);printf("三元组为(%d,%d,%d)\n",d[0],d[1],d[2]);return ;
}int main()
{int a,b,c;printf("请输入三元组各自的长度:");scanf("%d%d%d",&a,&b,&c);Queue* Qa=init_queue(a);Queue* Qb=init_queue(b);Queue* Qc=init_queue(c);func(Qa,Qb,Qc);clear_queue(Qa);clear_queue(Qb);clear_queue(Qc);return 0;
}

二、结果

请输入三元组各自的长度:3 4 5
请输入元组的值:-1 0 9
请输入元组的值:-25 -10 10 11
请输入元组的值:2 9 17 30 41
三元组的最小值为:2
三元组为(9,10,9)
sjq@SEER:~/coding$ ./a.out 
请输入三元组各自的长度:2 3 4
请输入元组的值:1 2
请输入元组的值:3 4 5
请输入元组的值:3 4 5 6
三元组的最小值为:2
三元组为(2,3,3)

相关文章:

  • 【论文速读】|探索ChatGPT在软件安全应用中的局限性
  • ubuntu20.04 10分钟搭建无延迟大疆无人机多线程流媒体服务器
  • linux系统安全加固
  • URL化00
  • 适用于 Windows 7/8/10/11 的 6 款最佳免费分区软件
  • vue使用Less报错semi-colon expectedcss(css-semicolonexpected)的解决方法
  • Java高级面试精粹:问题与解答集锦(一)
  • 【MySQL精通之路】MySQL的使用(2)-配置
  • 如何快速申请免费单域名SSL证书
  • 基于xilinx fpga RFSOC系列的Ultrascale+ RF Data Converter ip详解说明
  • 【计算机网络原理】对传输层TCP协议的重点知识的总结
  • 配置旁挂二层组网直接转发示例(命令行)
  • vue.js基础组件4--下
  • logback 配置
  • vivado spi axiIP核控制 pynqz2
  • js正则,这点儿就够用了
  • node.js
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • php ci框架整合银盛支付
  • Promise面试题2实现异步串行执行
  • python docx文档转html页面
  • STAR法则
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 想写好前端,先练好内功
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #Z0458. 树的中心2
  • #微信小程序:微信小程序常见的配置传旨
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (6)添加vue-cookie
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (实战篇)如何缓存数据
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)负载均衡,回话保持,cookie
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET6 命令行启动及发布单个Exe文件
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用
  • [C#]winform部署PaddleOCRV3推理模型
  • [C#]winform部署官方yolov10目标检测的onnx模型
  • [C][栈帧]详细讲解
  • [DevOps云实践] 彻底删除AWS云资源
  • [Django 0-1] Core.Checks 模块
  • [EFI]MSI GF63 Thin 9SCXR电脑 Hackintosh 黑苹果efi引导文件
  • [flask]http请求//获取请求头信息+客户端信息
  • [hdu 2826] The troubles of lmy [简单计算几何 - 相似]
  • [JS]变量