二维坐标排序,谢谢

arm_beginning 2008-03-23 12:31:32
先按x轴排,然后按y轴排,例如:
(9,20.95)(1.25,6)(10,36)(27,8)(27,0.05)(27,1)(27,30)(90,110)(27.05,17.9)(90,3)(……)
排为:(1.25,6)(9,20.95)(10,36)(27,0.05)(27,1)(27,8)(27,30)(27.05,17.9)(90,3)(90,110)(……)先排x轴,然后按照y排列,

请注意坐标点数目不定,由用户自己设定,可以两三个坐标点,也可以上百个坐标点,即源代码中不出现上列举例中的坐标点
步骤:
1、“请输入您的二维坐标点”
2、输入
3、统计共有坐标点数目(例如:“您共输入10个二维坐标点”)并点击确认
4,屏幕显示上面所要求格式的坐标排序(同时隐去原输入的所有二维坐标)


本人刚学c++,想从例子入手学习,因为觉得课本上的总是成绩,分数,姓名,性别之类的例子工程中对应的应用比较少。
希望多多关照,谢谢。

谢谢!
...全文
471 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluewanderer 2008-03-23
  • 打赏
  • 举报
回复
初学者着重的应该是principle而不是implementation =。=...
arm_beginning 2008-03-23
  • 打赏
  • 举报
回复
第一次,调试,死循环,ctrl+c跳出,
再调试,通过!
谢谢你了!
野男孩 2008-03-23
  • 打赏
  • 举报
回复

#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

struct POINT
{
public:
float x,y;

bool operator < (const POINT& right)
{
if (this->x < right.x) //按x坐标排序。如果要按y坐标,则把pt_cmp函数中的x换成y
{
return true;
}
else if (this->x == right.x)
{
if (this->y <= right.y)
{
return true;
}
else
return false;
}
return false;
}
};

void Output(vector<POINT>& pArr)
{
for(int i=0; i<pArr.size(); i++)
{
cout<<"("<<pArr[i].x<<", "<<pArr[i].y<<")\n";
}
}

int main()
{
//(9,20.95)(1.25,6)(10,36)(27,8)(27,0.05)(27,1)
//(27,30)(90,110)(27.05,17.9)(90,3)(……)
vector<POINT> vec;
do
{
POINT pt;
cout << "请输入您的二维坐标点(格式:x y,输入-1 -1表示结束):";
cin >> pt.x >> pt.y;
if (pt.x == -1 && pt.y == -1)
{
char ch = 'Y';
cout<<"您共输入"<<vec.size()<<"个二维坐标点, 对吧(输入Y 或 N):";
cin>>ch;
if (ch == 'N' || ch == 'n')
{
cout << "请重新输入" << endl;
vec.clear();
continue;
}
break;
}
vec.push_back(pt);
}while(1);

system("cls"); //clear screen

sort(vec.begin(), vec.end());

Output(vec);

return 0;
}

输入:

请输入您的二维坐标点(格式:x y,输入-1 -1表示结束):1 2
请输入您的二维坐标点(格式:x y,输入-1 -1表示结束):3 4
请输入您的二维坐标点(格式:x y,输入-1 -1表示结束):4 2
请输入您的二维坐标点(格式:x y,输入-1 -1表示结束):4 3
请输入您的二维坐标点(格式:x y,输入-1 -1表示结束):3 2
请输入您的二维坐标点(格式:x y,输入-1 -1表示结束):-1 -1
您共输入5个二维坐标点, 对吧(输入Y 或 N):n 《--------------这里如果输入n的话,重新输入数据。
请重新输入
请输入您的二维坐标点(格式:x y,输入-1 -1表示结束):9 20.95
请输入您的二维坐标点(格式:x y,输入-1 -1表示结束):1.25 6
请输入您的二维坐标点(格式:x y,输入-1 -1表示结束):10 36
请输入您的二维坐标点(格式:x y,输入-1 -1表示结束):27 8
请输入您的二维坐标点(格式:x y,输入-1 -1表示结束):27 0.05
请输入您的二维坐标点(格式:x y,输入-1 -1表示结束):27 1
请输入您的二维坐标点(格式:x y,输入-1 -1表示结束):27 30
请输入您的二维坐标点(格式:x y,输入-1 -1表示结束):90 110
请输入您的二维坐标点(格式:x y,输入-1 -1表示结束):27.05 17.9
请输入您的二维坐标点(格式:x y,输入-1 -1表示结束):90 3
请输入您的二维坐标点(格式:x y,输入-1 -1表示结束):-1 -1
您共输入10个二维坐标点, 对吧(输入Y 或 N):y 《--------------回车后清屏

接着显示结果:
(1.25, 6.00)
(9.00, 20.95)
(10.00, 36.00)
(27.00, 0.05)
(27.00, 1.00)
(27.00, 8.00)
(27.00, 30.00)
(27.05, 17.90)
(90.00, 3.00)
(90.00, 110.00)

64,849

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧