有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; }
沒有留言:
張貼留言