Sort


Submit solution

Points: 10 (partial)
Time limit: 1.0s
Memory limit: 64M

Authors:
Problem type
Allowed languages
Java 19, Java 8

題目描述

給定 N 和 M,接下來會給予 N 個數字,我們需要根據一個特定的排序規則來排序這些數字,排序規則如下:

  1. 數字按照它們除以 M 的餘數升序排列。
  2. 如果兩個數的餘數相同,奇數要排在偶數前面。
  3. 如果兩個數的餘數相同且都是奇數,則數值較大的排在前面。
  4. 如果兩個數的餘數相同且都是偶數,則數值較小的排在前面。

輸入格式

  • 每組測資一開始包含兩個整數 N, M。
  • 接下來的 N 行裡每一行只包含一個整數。
  • 這些整數保證都可以被存在 32-bit 有號整數裡。
  • 輸入以 N = 0, M = 0 代表結束。

輸出格式

對於每一組輸入請輸出 N + 1 行整數:

  • 第一行為兩個整數 N, M。
  • 接下來的 N 行都包含一個整數,為上述的數字按上述規則排列後的結果。
  • 對於輸入測資尾端的兩個 0, 0 請也輸出兩個空白分隔的 0, 0。

範例

範例輸入
15 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0 0
範例輸出
15 3
15
9
3
6
12
13
7
1
4
10
11
5
2
8
14
0 0

Comments


  • 0
    11010044  commented on May 29, 2026, 4:39 p.m.

    code : -7 % 3 = -1 math : -7 %3 = 2

    math sol :((-7 % 3 ) + 3 ) % 3 =2

    ((number % 3 ) + 3 ) % 3


  • 0
    scu12156229  commented on May 29, 2026, 11:36 a.m.

    最終排序結果:15, 9, 3, 6, 12, 13, 7, 1, 4, 10, 11, 5, 2, 8, 14


  • 0
    scu12156229  commented on May 28, 2026, 12:03 p.m.

    說明

    對於範例輸入(N=15, M=3):

    數字 餘數 奇偶 說明
    1 1 餘數=1
    2 2 餘數=2
    3 0 餘數=0
    4 1 餘數=1
    5 2 餘數=2
    6 0 餘數=0
    7 1 餘數=1
    8 2 餘數=2
    9 0 餘數=0
    10 1 餘數=1
    11 2 餘數=2
    12 0 餘數=0
    13 1 餘數=1
    14 2 餘數=2
    15 0 餘數=0

    排序規則依次應用:

    1. 按餘數分組(餘數升序):

      • 餘數=0:3, 6, 9, 12, 15
      • 餘數=1:1, 4, 7, 10, 13
      • 餘數=2:2, 5, 8, 11, 14
    2. 組內排序

      • 餘數=0(奇偶規則):奇數(15, 9, 3) 在 偶數(12, 6) 前 → 15, 9, 3, 12, 6
        • 奇數按數值大小降序:15 > 9 > 3
        • 偶數按數值大小升序:6 < 12
      • 餘數=1(奇偶規則):奇數(1, 7, 13) 在 偶數(4, 10) 前 → 13, 7, 1, 4, 10
        • 奇數按數值大小降序:13 > 7 > 1
        • 偶數按數值大小升序:4 < 10
      • 餘數=2(奇偶規則):奇數(5, 11) 在 偶數(2, 8, 14) 前 → 11, 5, 2, 8, 14
        • 奇數按數值大小降序:11 > 5
        • 偶數按數值大小升序:2 < 8 < 14
    3. 最終排序結果:15, 9, 3, 12, 6, 13, 7, 1, 4, 10, 11, 5, 2, 8, 14