我想问一道编程题。希望高手指教。

大道简 2009-07-02 10:44:09
在平面直角坐标系中有奇数个点,奇数个点的点数在1到200000之间,两个人画线,一个人甲画垂直于x轴的。必须经过其中一点,也可能经过几点,(它们的x坐标相同),另一个人乙画一条平行于x轴的直线,必须与甲画的直线交于甲通过的那个平面上先前出现的点之一。以这两条线为准,他们确定四个象限,一、三象限的点个数归甲,二、四象限的点个数归乙。
要求:第一行输入奇数点的个数n,
以下n行输入n个点的坐标(x坐标,y坐标)(以原作标系为准),
在输入的n个坐标中,中间输入两个线的交点坐标。n个坐标输入完毕之后,再另起一行,输入结束符0.再另起一行输出甲乙各得多少点。例如输入
11
3 2
3 3
3 4
3 6
2 -2
1 -3
0 0
-3 -3
-3 -2
-3 -4
3 -7
0
输出:6 3
这是吉大的竞赛题,题中还有一个细节要求就是测试几组,而不是一组。
我挺晕的。英语原文部分在http://acm.jlu.edu.cn/joj/showproblem.php?pid=2303。请高手指教,如何编写。
...全文
70 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wokao112358 2009-07-06
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int input_odd()
{
cout<<"请输入一个奇数作为点的个数:"<<" ";
while(1)
{
int odd_no;
cin>>odd_no;
//判断输入的是否为奇数
if(odd_no % 2 == 0)
cout<<"输入的不是奇数请重新输入:"<<" ";
else
return odd_no;
}
}

int main()
{
//获取奇数大小
int odd_no = input_odd();

//根据奇数来获取坐标
int coordinate_x[20000];//这样分配内存太过浪费,如果你想看如何动态分配可以参考相关资料,这里暂不实现
int coordinate_y[20000];
int coordinate_type[20000] = {0};//为将来给坐标分象限做准备
//cout<<"请输入所有"<<odd_no<<"行坐标!"<<endl;
for(int i=0 ; i < odd_no; i++)
{
cout<<"输入第"<<i<<"个坐标:";
cin>>coordinate_x[i]>>coordinate_y[i];
}
for(int j=0 ; j < odd_no; j++)
{
int mid_odd_no = (odd_no-1)/2;//中间坐标的编号
if (coordinate_x[j] > coordinate_x[mid_odd_no] &&
coordinate_y[j] > coordinate_y[mid_odd_no])
{
coordinate_type[j] = 1;
cout << coordinate_x[j] <<" "<< coordinate_y[j] << endl;
}
else if(coordinate_x[j] < coordinate_x[mid_odd_no] &&
coordinate_y[j] > coordinate_y[mid_odd_no])
{
coordinate_type[j] = 2;
}
/************************************************************************/
/* 判断条件中不用'=',因为实际操作中会把原点统计若干次
所以个人建议尽量把判断在轴上的线的条件单独列出,你可以根据题目要求做改动
接下来的自己写吧!没做过完整的测试,应该没什么问题 */
/************************************************************************/
else
{

}
}


return 0;
}
大道简 2009-07-04
  • 打赏
  • 举报
回复
谁也不属于。
太乙 2009-07-02
  • 打赏
  • 举报
回复
线上的点归谁?
wokao112358 2009-07-02
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

int input_odd()
{
cout<<"请输入一个奇数作为点的个数:"<<" ";
while(1)
{
int odd_no;
cin>>odd_no;
//判断输入的是否为奇数
if(odd_no % 2 == 0)
cout<<"输入的不是奇数请重新输入:"<<" ";
else
return odd_no;
}
}

int main()
{
//获取奇数大小
int odd_no = input_odd();

//根据奇数来获取坐标
int coordinate_x[20000];//这样分配内存太过浪费,如果你想看如何动态分配可以参考相关资料,这里暂不实现
int coordinate_y[20000];
int coordinate_type[20000] = {0};//为将来给坐标分象限做准备
//cout<<"请输入所有"<<odd_no<<"行坐标!"<<endl;
for(int i=0 ; i < odd_no; i++)
{
cout<<"输入第"<<i<<"个坐标:";
cin>>coordinate_x[i]>>coordinate_y[i];
}
for(int j=0 ; j < odd_no; j++)
{
int mid_odd_no = (odd_no-1)/2;//中间坐标的编号
if (coordinate_x[j] > coordinate_x[mid_odd_no] &&
coordinate_y[j] > coordinate_y[mid_odd_no])
{
coordinate_type[j] = 1;
cout << coordinate_x[j] <<" "<< coordinate_y[j] << endl;
}
else if(coordinate_x[j] < coordinate_x[mid_odd_no] &&
coordinate_y[j] > coordinate_y[mid_odd_no])
{
coordinate_type[j] = 2;
}
/************************************************************************/
/* 判断条件中不用'=',因为实际操作中会把原点统计若干次
所以个人建议尽量把判断在轴上的线的条件单独列出,你可以根据题目要求做改动
接下来的自己写吧!没做过完整的测试,应该没什么问题 */
/************************************************************************/
else
{

}
}


return 0;
}
wokao112358 2009-07-02
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int input_odd()
{
cout<<"请输入一个奇数作为点的个数:"<<" ";
while(1)
{
int odd_no;
cin>>odd_no;
//判断输入的是否为奇数
if(odd_no % 2 == 0)
cout<<"输入的不是奇数请重新输入:"<<" ";
else
return odd_no;
}
}

int main()
{
//获取奇数大小
int odd_no = input_odd();

//根据奇数来获取坐标
int coordinate_x[20000];//这样分配内存太过浪费,如果你想看如何动态分配可以参考相关资料,这里暂不实现
int coordinate_y[20000];
int coordinate_type[20000] = {0};//为将来给坐标分象限做准备
//cout<<"请输入所有"<<odd_no<<"行坐标!"<<endl;
for(int i=0 ; i < odd_no; i++)
{
cout<<"输入第"<<i<<"个坐标:";
cin>>coordinate_x[i]>>coordinate_y[i];
}
for(int j=0 ; j < odd_no; j++)
{
int mid_odd_no = (odd_no-1)/2;//中间坐标的编号
if (coordinate_x[j] > coordinate_x[mid_odd_no] &&
coordinate_y[j] > coordinate_y[mid_odd_no])
{
coordinate_type[j] = 1;
cout << coordinate_x[j] <<" "<< coordinate_y[j] << endl;
}
else if(coordinate_x[j] < coordinate_x[mid_odd_no] &&
coordinate_y[j] > coordinate_y[mid_odd_no])
{
coordinate_type[j] = 2;
}
/************************************************************************/
/* 判断条件中不用'=',因为实际操作中会把原点统计若干次
所以个人建议尽量把判断在轴上的线的条件单独列出,你可以根据题目要求做改动
接下来的自己写吧!没做过完整的测试,应该没什么问题 */
/************************************************************************/
else
{

}
}


return 0;
}
你看看满足你要求不?
wokao112358 2009-07-02
  • 打赏
  • 举报
回复
奇数个点?而你例子里输入的是偶数个坐标,本来想根据你的例子判断线上的点归谁,现在看来是不行了。

其实很简单,把坐标放入数组,设置一个坐标类型数组,根据简单的象限判断分为1,2,3,4,最后统计一下就行了

还有你的结束符是什么?数字零?这个会和前面的数字产生一点冲突,影响结束的识别。其实我个人觉得只要获得了奇数,然后控制循环获得这些的坐标,不需要什么结束标识。

65,210

社区成员

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

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