
求教C++编程高手:我初学编程,遇到阻碍,下面这道题没有解出.请求帮忙.
给定一组点(x,y),求距离最远的两个点之间的距离。关于输入第一行是点数n(n大于等于2)接着每一行代表一个点,由两个浮点数xy组成。关于输出输出一行是最远两点之间的距离...
给定一组点(x,y),求距离最远的两个点之间的距离。
关于输入
第一行是点数n(n大于等于2)
接着每一行代表一个点,由两个浮点数x y组成。
关于输出
输出一行是最远两点之间的距离。
例子输入
6
34.0 23.0
28.1 21.6
14.7 17.1
17.0 27.2
34.7 67.1
29.3 65.1
例子输出
53.8516
我想用数组存储输入的数,但数的个数由n决定,而数组不允许元素个数为变量,因此感觉没有办法.望高手指教. 展开
关于输入
第一行是点数n(n大于等于2)
接着每一行代表一个点,由两个浮点数x y组成。
关于输出
输出一行是最远两点之间的距离。
例子输入
6
34.0 23.0
28.1 21.6
14.7 17.1
17.0 27.2
34.7 67.1
29.3 65.1
例子输出
53.8516
我想用数组存储输入的数,但数的个数由n决定,而数组不允许元素个数为变量,因此感觉没有办法.望高手指教. 展开
4个回答
展开全部
#include<iostream>
#include<cmath>
using namespace std;
struct Data
{
float x;
float y;
};
void input(Data *ps,int n);
float distance(Data *p1,Data *p2);
void show(Data *p);
int main()
{
int n;
cout<<"请输入所需要的点n:\n";
cin>>n;
Data *p=new Data[n]; //定义个结构指针,动态确定所需的点
input(p,n);
float max=distance(p,(p+1)); //初步确定最大值为1,2个点之间距离
int flagi=0; int flagj=1; //设置最大两个点的标号
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
double d=distance((p+i),(p+j));
if(max<d)
{
max=d;
flagi=i; flagj=j;
}
}
}
cout<<"所有的点之中最大距离的两个点是:\n";
show((p+flagi));
show((p+flagj));
cout<<"其距离为:"<<max<<endl;
return 0;
}
void input(Data *ps,int n) //输入点
{
for(int i=0;i<n;i++)
{
cout<<"请输入第"<<i+1<<"个点的坐标x,y:\n";
cin>>ps->x;
cin>>ps->y;
}
}
float distance(Data *p1,Data *p2) //求两点之间的距离
{
float distance;
distance=sqrt( ((p1->x)-(p2->x))*((p1->x)-(p2->x)) + ((p1->y)-(p2->y))*((p1->y)-(p2->y)) ); // 数学公式
return distance;
}
void show(Data *p)
{
cout<<"("<<p->x<<","<<p->y<<")"<<endl;
}
大概意思就是这样,需要用结构体来存储,动态内存分配。
#include<cmath>
using namespace std;
struct Data
{
float x;
float y;
};
void input(Data *ps,int n);
float distance(Data *p1,Data *p2);
void show(Data *p);
int main()
{
int n;
cout<<"请输入所需要的点n:\n";
cin>>n;
Data *p=new Data[n]; //定义个结构指针,动态确定所需的点
input(p,n);
float max=distance(p,(p+1)); //初步确定最大值为1,2个点之间距离
int flagi=0; int flagj=1; //设置最大两个点的标号
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
double d=distance((p+i),(p+j));
if(max<d)
{
max=d;
flagi=i; flagj=j;
}
}
}
cout<<"所有的点之中最大距离的两个点是:\n";
show((p+flagi));
show((p+flagj));
cout<<"其距离为:"<<max<<endl;
return 0;
}
void input(Data *ps,int n) //输入点
{
for(int i=0;i<n;i++)
{
cout<<"请输入第"<<i+1<<"个点的坐标x,y:\n";
cin>>ps->x;
cin>>ps->y;
}
}
float distance(Data *p1,Data *p2) //求两点之间的距离
{
float distance;
distance=sqrt( ((p1->x)-(p2->x))*((p1->x)-(p2->x)) + ((p1->y)-(p2->y))*((p1->y)-(p2->y)) ); // 数学公式
return distance;
}
void show(Data *p)
{
cout<<"("<<p->x<<","<<p->y<<")"<<endl;
}
大概意思就是这样,需要用结构体来存储,动态内存分配。

2023-06-12 广告
char seg7[10]={0xc0,0xf9,0xa4,0xb0,0x9,0x92,0x82,0xf8,0x80} sbit w1=b2^0; sbit w2=b2^1; sbit k1=b3^0; /=1表示键盘按下 char cou...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
关键字 new 动态创建数组。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不要为数组的大小去着魔了,其实数组就是固定大小的,所以,你定义个足够大的数组吧。
如果比较熟悉指针的话,你可以看看malloc函数,这个可以分配个指定的大小空间
如果比较熟悉指针的话,你可以看看malloc函数,这个可以分配个指定的大小空间
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用一个结构体存储x和y,,然后建立一个结构数组
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询