题目




输入
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《编程思维与实践》个人学习笔记相关推荐

  1. 课后自主练习 (进制)1014. i-1 进制(Easy)naive《编程思维与实践》个人学习笔记

    题目 思路①(比较拉跨的思路) 先转换成十进制再转换成2进制之后按复数相乘若干次相加即可.可惜不能AC只能过部分数据. 麻了--题目给的数据太大LL都放不下,过段时间再写一个用字符串处理的情况吧,,, ...

  2. 用python写希尔排序_python希尔排序介绍(实例)

    希尔排序介绍 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本,该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个&qu ...

  3. TreeSet集合(自然排序和比较器排序)

    TreeSet集合 自然排序和比较器排序 ​ 当指执行插入排序.希尔排序.归并排序等算法时,比较两个对象"大小"的比较操作.我们很容易理解整型的 i>j 这样的比较方式,但当 ...

  4. 冒泡链表排序java_链表排序(冒泡、选择、插入、快排、归并、希尔、堆排序)...

    以下排序算法的正确性都可以在LeetCode的链表排序这一题检测.本文用到的链表结构如下(排序算法都是传入链表头指针作为参数,返回排序后的头指针) struct ListNode { int val; ...

  5. 排序算法---选择排序(java版)

    简单选择排序 原理 选择排序(Selection Sort)的原理有点类似插入排序,也分已排序区间和未排序区间.但是选择排序每次会从排序区间中找到最小的元素,将其放到已排序区间的末尾. 简单选择排序执 ...

  6. 排序算法---计数排序(java版)

    计数排序 原理 计数排序(Counting Sort) 使用了一个额外的数组 C,其中第 i 个元素是待排序数组A 中值等于 i 的元素的个数.然后根据数组 C 来将 A 中的元素排到正确的位置.其实 ...

  7. pandas对dataframe进行排序:单数据列排序、多数据列排序、NA值排序位置、排序算法

    pandas对dataframe进行排序:单数据列排序.多数据列排序.NA值排序位置.排序算法 目录 pandas对dataframe进行排序 #仿真数据 #基于单数据列进行dataframe排序

  8. R语言dplyr包arrage函数排序dataframe实战:单列排序、多列排序、自定义排序

    R语言dplyr包arrage函数排序dataframe实战:单列排序.多列排序.自定义排序 目录 R语言dplyr包arrage函数排序dataframe实战:单列排序.多列排序

  9. 数据库SQL语句学习笔记(3)-排序检索数据

    1.排序数据 如果不排序,数据一般将以它在底层表中出现的顺序显示,这有可能是数据最初添加到表中的顺序.但是如果数据随后进行过更新或删除,这个顺序就会受到DBMS重用回收存储空间的方式的影响. 子句:S ...

最新文章

  1. poj2446(匈牙利算法)
  2. 看完50多家阵亡的初创企业,我们发现了AI创业的5个行业潜规则
  3. 从150kHz 到 150MHz漫谈智能车竞赛中的无线导航技术
  4. 如何使用T-SQL临时禁用外键约束?
  5. 你那么追捧的springboot,到底替你做了什么?
  6. 助力产教融合,阿里云教育一体机发布
  7. [渝粤教育] 广东-国家-开放大学 21秋期末考试管理会计10171k2
  8. 5种样式实现div容器中三图摆放实例对比说明
  9. Pythonseleniumtesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考
  10. Unity JS 转 C#
  11. access 套用表格_将ACCESS数据库导入到EXCEL表格
  12. python爬虫实例——中国电影票房
  13. 数控切削加工尺寸不稳定怎么办?这么办!
  14. 笔记本显示电源已连接但是未充电的简单解决办法
  15. 关于SSL以及https的相关信息
  16. 26字母 导航 android,Android自定义View实现字母导航栏的代码
  17. windows升级卡在配置更新96%
  18. 网易云音乐打卡2.0(一天300首)10级指日可待
  19. 学习《华为基本法》(5):经营重心
  20. 新建tag 查看本地Tag 查看远端Tag 基于远端Tag新建分支 删除远端Tag 等操作

热门文章

  1. Web开发了一个完整精美的聊天室(登录部分引入了Vue技术)
  2. 累加器实验总结计算机组成,计算机组成原理累加器实验报告
  3. PostgreSQL row number
  4. .Net Framework 0x800b0109 -已处理证书链,但是在不受信任提供程序信任的根证书中终止。
  5. 安装更强大更美观的zsh,配置oh my zsh及插件
  6. 算法基础:k最近邻算法
  7. Linux运维10:scp命令详解
  8. 【细读Spring Boot源码】重中之重refresh()
  9. 石墨笔记,Ulysses,Effie,影评人该选什么样的文字编辑应用?
  10. PowerPoint 幻灯片 PPT 进度条 制作