回 帖 发 新 帖 刷新版面

主题:能帮我编个程序吗,

在一个n*n的区域由随机坐标生成n个点,对这些点按它们到原点的距离从小到大进行排序,并输出结果。

 

 

 

麻烦各位了  会的帮个忙,感激不尽

回复列表 (共2个回复)

沙发

你得告诉别人是哪步不会

板凳

我编了一个可是我想让他每次运行的结果都变 要怎么改啊!
#include <iostream.h>
#include <ctime>
#include <cstdlib>
#include <cmath>
#define n 8
class point
{
public:
        point(int x=0,int y=0);
        void setpoint();
        friend ostream & operator<<(ostream &,const point &);
        friend bool operator != (point &,point &);
        int getx() {return x;}
        int gety() {return y;}
        double length() {return sqrt(x*x+y*y);}
private:
        int x;
        int y;
};
point::point(int x,int y)
{
    x=0;
    y=0;
}

void point::setpoint()
{   
    static srand((unsigned)time(0));
    x=rand()%n;
    y=rand()%n;
}

ostream & operator<<(ostream &output,const point &p)
{
    output<<"("<<p.x<<","<<p.y<<")";
    return output;
}

bool operator !=(point &a,point &b)

    if(a.x!=b.x&&a.y!=b.y)
    return true;
    else return false;
}



int main()
{
    point a[10];
    void select(point a[]);
    int i,j;
    for(i=0;i<n;i++)
        for(j=i+1;j<=n;)
        {
            a[j].setpoint();
            if(a[j]!=a[i])
                j++;
        }
    cout<<"在"<<n<<"*"<<n<<"区域中,随机取"<<n<<"个点:"<<endl;
    for(i=1;i<=n;i++)
    {
        cout<<a[i]<<"    ";
    }
    cout<<endl;
    cout<<"它们到原点的距离从小到大的排序为:"<<endl;
    select(a);
    cout<<endl;
    return 0;   
}
          
void select(point a[])
{
    int j,i;
    point t;
        for(j=0;j<n-1;j++)
            for(i=0;i<n-j;i++)
                if(a[i].length()>=a[i+1].length())
                {
                    t=a[i];a[i]=a[i+1];a[i+1]=t;
                }
                        for(i=0;i<n;i++)
                        {
                            cout<<a[i]<<":"<<a[i].length()<<"          ";
                        }
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册