排序刷题9

题目来源:攀爬者 - 洛谷

今天是除夕夜,祝大家除夕快乐,新的一年继续和大家陪伴刷题,祝大家龙年大吉,万事顺意,也祝今年找工作的伙伴们,顺利找到心仪的岗位。

解题思路 :这道题其实还满简单的,用结构体+排序+数学。使用sort函数和自定义比较函数对数组进行排序,根据每个点的z值从小到大排序。然后依次算欧几里得距离,求和就可以解决啦。

cpp 复制代码
#include<iostream>
#include<algorithm>
#include <cmath>
using namespace std;

struct Climbs
{
	int x, y, z;
}a[50000];

// 自定义比较函数,用于排序
bool cmp(Climbs a, Climbs b)
{
	return a.z < b.z;
}



int main()
{
	int n;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i].x >> a[i].y >> a[i].z;
	}
	// 根据z值对点进行排序
	sort(a, a + n, cmp);
	// 计算总距离
	double total_distance = 0;
	for (int i = 1; i < n; i++)
	{
		double distance = sqrt(pow(a[i].x - a[i-1].x, 2) +
			                   pow(a[i].y - a[i-1].y, 2) +
			                   pow(a[i].z - a[i-1].z, 2));
		total_distance += distance;

	}
	// 输出总距离,保留三位小数
	printf("%.3f\n", total_distance);
	return 0;
}

ps:记得保留三位小数喔,不然系统过不去~

相关推荐
夜思红尘17 小时前
算法--双指针
python·算法·剪枝
散峰而望18 小时前
【算法竞赛】C++函数详解:从定义、调用到高级用法
c语言·开发语言·数据结构·c++·算法·github
冷凝雨18 小时前
复数乘法(C & Simulink)
c语言·开发语言·信号处理·simulink·dsp
CoderCodingNo18 小时前
【GESP】C++五级真题(贪心思想考点) luogu-B4071 [GESP202412 五级] 武器强化
开发语言·c++·算法
我有一些感想……18 小时前
An abstract way to solve Luogu P1001
c++·算法·ai·洛谷·mlp
前端小L18 小时前
双指针专题(三):去重的艺术——「三数之和」
javascript·算法·双指针与滑动窗口
智者知已应修善业19 小时前
【求等差数列个数/无序获取最大最小次大次小】2024-3-8
c语言·c++·经验分享·笔记·算法
LYFlied19 小时前
【每日算法】LeetCode 416. 分割等和子集(动态规划)
数据结构·算法·leetcode·职场和发展·动态规划
多米Domi01120 小时前
0x3f 第19天 javase黑马81-87 ,三更1-23 hot100子串
python·算法·leetcode·散列表
..过云雨20 小时前
17-2.【Linux系统编程】线程同步详解 - 条件变量的理解及应用
linux·c++·人工智能·后端