课后自主练习(排序)1027. 极坐标排序 easy《编程思维与实践》个人学习笔记
题目
输入
3
5
1.0 1.0
2.0 2.0
-1.0 1.0
0 1.0
1.0 0
1
0 -1.0
6
1.0 1.0
0 1.0
1.0 0
-1.0 1.0
-1.0 -1.0
1.0 -1.0
思路
经典的 创造类,输入(并转化对应的量),排序,输出
需要注意的是由于atan只能转成一个pi的范围,所以要根据极坐标在哪个象限来分类讨论进行+npi/2的处理
代码
#include<iostream>
#include<cmath>
#define db double
using namespace std;struct polar
{db x;db y;db angle;db chord;db hypoteuse(db x, db y){db temp = pow(x,2) + pow(y,2);temp = sqrt(temp);return temp;}db Pangle(db x ,db y){if(x == 0 && y > 0){return acos(0);}else if(x == 0 && y < 0){return 3 * acos(0);}db k = (db)y / (db)x;if(x > 0 && y >= 0){return atan(k);}else if(x > 0 && y < 0){return 4 *acos(0) + atan(k);}else if(x < 0 && y > 0){return 2 * acos(0) + atan(k);}else{return 2 * acos(0) + atan(k);}}void init(){chord = hypoteuse(x,y);angle = Pangle(x,y);}
};int cmp(const void *q1, const void *q2)
{polar * p1 = (polar *)q1;polar * p2 = (polar *)q2;if(p1->angle == p2->angle){if(p1->chord > p2->chord){return -1;}else{return 1;}}if(p1->angle > p2->angle){return 1;}elsereturn -1;
}void print(polar *a,int len)
{for(int i = 0; i < len; i++)printf("(%.4lf,%.4lf)",a[i].chord,a[i].angle);
}int main()
{int total;cin >> total;for(int i = 0; i < total; i++){int allp;cin >> allp;polar * point = new polar[allp];for(int j = 0; j < allp; j++){cin >> point[j].x >> point[j].y;point[j].init();}cout << "case #"<<i<<":" << endl;// for(int i = 0; i < allp; i++)// {// printf("(%.4lf,%.4lf)\n",point[i].chord,point[i].angle);// }qsort(point,allp,sizeof(polar),cmp);for(int i = 0; i < allp; i++){printf("(%.4lf,%.4lf)\n",point[i].chord,point[i].angle);}delete point;}}
课后自主练习(排序)1027. 极坐标排序 easy《编程思维与实践》个人学习笔记相关推荐
- 课后自主练习 (进制)1014. i-1 进制(Easy)naive《编程思维与实践》个人学习笔记
题目 思路①(比较拉跨的思路) 先转换成十进制再转换成2进制之后按复数相乘若干次相加即可.可惜不能AC只能过部分数据. 麻了--题目给的数据太大LL都放不下,过段时间再写一个用字符串处理的情况吧,,, ...
- 用python写希尔排序_python希尔排序介绍(实例)
希尔排序介绍 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本,该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个&qu ...
- TreeSet集合(自然排序和比较器排序)
TreeSet集合 自然排序和比较器排序 当指执行插入排序.希尔排序.归并排序等算法时,比较两个对象"大小"的比较操作.我们很容易理解整型的 i>j 这样的比较方式,但当 ...
- 冒泡链表排序java_链表排序(冒泡、选择、插入、快排、归并、希尔、堆排序)...
以下排序算法的正确性都可以在LeetCode的链表排序这一题检测.本文用到的链表结构如下(排序算法都是传入链表头指针作为参数,返回排序后的头指针) struct ListNode { int val; ...
- 排序算法---选择排序(java版)
简单选择排序 原理 选择排序(Selection Sort)的原理有点类似插入排序,也分已排序区间和未排序区间.但是选择排序每次会从排序区间中找到最小的元素,将其放到已排序区间的末尾. 简单选择排序执 ...
- 排序算法---计数排序(java版)
计数排序 原理 计数排序(Counting Sort) 使用了一个额外的数组 C,其中第 i 个元素是待排序数组A 中值等于 i 的元素的个数.然后根据数组 C 来将 A 中的元素排到正确的位置.其实 ...
- pandas对dataframe进行排序:单数据列排序、多数据列排序、NA值排序位置、排序算法
pandas对dataframe进行排序:单数据列排序.多数据列排序.NA值排序位置.排序算法 目录 pandas对dataframe进行排序 #仿真数据 #基于单数据列进行dataframe排序
- R语言dplyr包arrage函数排序dataframe实战:单列排序、多列排序、自定义排序
R语言dplyr包arrage函数排序dataframe实战:单列排序.多列排序.自定义排序 目录 R语言dplyr包arrage函数排序dataframe实战:单列排序.多列排序
- 数据库SQL语句学习笔记(3)-排序检索数据
1.排序数据 如果不排序,数据一般将以它在底层表中出现的顺序显示,这有可能是数据最初添加到表中的顺序.但是如果数据随后进行过更新或删除,这个顺序就会受到DBMS重用回收存储空间的方式的影响. 子句:S ...
最新文章
- poj2446(匈牙利算法)
- 看完50多家阵亡的初创企业,我们发现了AI创业的5个行业潜规则
- 从150kHz 到 150MHz漫谈智能车竞赛中的无线导航技术
- 如何使用T-SQL临时禁用外键约束?
- 你那么追捧的springboot,到底替你做了什么?
- 助力产教融合,阿里云教育一体机发布
- [渝粤教育] 广东-国家-开放大学 21秋期末考试管理会计10171k2
- 5种样式实现div容器中三图摆放实例对比说明
- Pythonseleniumtesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考
- Unity JS 转 C#
- access 套用表格_将ACCESS数据库导入到EXCEL表格
- python爬虫实例——中国电影票房
- 数控切削加工尺寸不稳定怎么办?这么办!
- 笔记本显示电源已连接但是未充电的简单解决办法
- 关于SSL以及https的相关信息
- 26字母 导航 android,Android自定义View实现字母导航栏的代码
- windows升级卡在配置更新96%
- 网易云音乐打卡2.0(一天300首)10级指日可待
- 学习《华为基本法》(5):经营重心
- 新建tag 查看本地Tag 查看远端Tag 基于远端Tag新建分支 删除远端Tag 等操作
热门文章
- Web开发了一个完整精美的聊天室(登录部分引入了Vue技术)
- 累加器实验总结计算机组成,计算机组成原理累加器实验报告
- PostgreSQL row number
- .Net Framework 0x800b0109 -已处理证书链,但是在不受信任提供程序信任的根证书中终止。
- 安装更强大更美观的zsh,配置oh my zsh及插件
- 算法基础:k最近邻算法
- Linux运维10:scp命令详解
- 【细读Spring Boot源码】重中之重refresh()
- 石墨笔记,Ulysses,Effie,影评人该选什么样的文字编辑应用?
- PowerPoint 幻灯片 PPT 进度条 制作