题目:平面上有n个点,坐标均为整数。请按与坐标原点(0,0)距离的远近将所有点排序输出。可以自己写排序函数,也可以用qsort库函数排序。
输入:输入有两行,第一行是整数n(1<=n<=10),接下来有n行,每行一对整数(每对整数对应一个点)。
输出:输出排序后的所有点,格式为(u,v),每个点后有一个空格。测试数据保证每个点到原点的距离都不同。
Exemple:
样例输入:4
1 3
2 5
1 4
4 2
样例输出:(1,3) (1,4) (4,2) (2,5)
解题思路:这道题要用结构体做,然后在结构体中除了有横坐标x,纵坐标y,还要定义一个到原点的距离d, 然后通过比较距离d的值来判断要不要交换2个坐标来进行排序。 然后这里交换俩坐标的时候也有一个小技巧,就是整体交换,定义一个t(t也是一个结构体,就是t里面包括了x和y两个东东),然后t作为2坐标交换的中间变量。
My Daima:
#include<stdio.h>
#include<math.h>
struct point //这是定义一个结构体
{
double x,y,d;
};
int main()
{
int i,j,n;
struct point a[11],t; //这里的t也是个结构体,到时候交换俩坐标时你就会发现特方便
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%lf%lf",&a[i].x,&a[i].y);
a[i].d=sqrt(a[i].x*a[i].x+a[i].y*a[i].y); //这是计算每个点到原点的距离
}
for(i=1;i<n;i++) //这是进行排序的操作,和数组排序一样一样的
{
for(j=0;j<n-i;j++)
{
if(a[j].d>a[j+1].d) //比较每个点到原点的距离来判断是否交换坐标
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(i=0;i<n;i++)
printf("(%.0lf,%.0lf) ",a[i].x,a[i].y); //输出排序后的坐标,注意每个坐标后都有空格
return 0;
}