有N個在二維座標系上的點,以Pi=(xi,yi)表示第i個點。寫一個程式將這些點從左下到右上進行排序(以遞增、x值優先的方式排序)。
輸入:
輸入第一行為一整數N,代表接下來有幾個點座標。假設0<N<=0,接下來N行每一行包含兩個數字,以空白隔開,分別代表點座標的x與y值。
輸出:
輸出排序後的點座標。
如果N超過範圍,輸出錯誤訊息"invalid number of points"。
範例輸出:
解題思路:
以泡沫排序法排序,記得x值跟y值都要交換,然後再跑一次確定若x值相同時y的大小。
程式碼:
#include <stdio.h>
int main()
{
int n;
float a[10][2] = { 0 };
printf("Enter number of points: ");
scanf_s("%d", &n);
if (n >= 0 || n < 10)
printf("invalid number of points.\n");
else
{
for (int i = 0; i < n; i++)
scanf_s("%f %f", &a[i][0], &a[i][1]);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (a[i][0] < a[j][0])
{
float temp = a[i][0];
a[i][0] = a[j][0];
a[j][0] = temp;
temp = a[i][1];
a[i][1] = a[j][1];
a[j][1] = temp;
}
}
}
for (int i = 0; i < n - 1; i++)
{
if (a[i][0] == a[i + 1][0] && a[i][1] > a[i + 1][1])
{
float temp = a[i][1];
a[i][1] = a[i + 1][1];
a[i + 1][1] = temp;
}
}
printf("\n");
printf("Sorted result:\n");
for (int i = 0; i < n; i++)
printf("%.2f %.2f\n", a[i][0], a[i][1]);
}
return 0;
}

沒有留言:
張貼留言