返回目录

题目描述

给定一个非空数组(列表),其元素数据类型为整型,请按照数组元素十进制最低位从小到大进行排序,十进制最低位相同的元素,相对位置保持不变。
当数组元素为负值时,十进制最低位等同于去除符号位后对应十进制值最低位。

输入描述

  • 给定一个非空数组,其元素数据类型为32位有符号整数,数组长度[1, 1000]

输出描述

  • 输出排序后的数组

示例:

输入1,2,5,-21,22,11,55,-101,42,8,7,32
输出1,-21,11,-101,2,22,42,32,5,55,7,8
说明

Python算法源码

def get_key(num):
    num = abs(num)  # 取绝对值
    return num % 10  # 返回除以10的余数作为关键值

if __name__ == "__main__":
    input_str = input()  # 从标准输入读取一行字符串
    nums_list = list(map(int, input_str.split(',')))  # 将输入字符串按逗号分隔成数字列表
    nums_list.sort(key=lambda num: get_key(num))  # 根据关键值排序数字列表
    print(",".join(map(str, nums_list)))  # 输出排序后的数字列表,以逗号分隔

C算法源码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// 获取数字的关键值
int getKey(int num) {
    num = num > 0 ? num : -num; // 取绝对值
    return num % 10; // 返回除以10的余数作为关键值
}

// 比较函数,用于qsort排序
int compare(const void* a, const void* b) {
    int num1 = *(const int*)a; // 解引用指针,获取数字1
    int num2 = *(const int*)b; // 解引用指针,获取数字2
    return getKey(num1) - getKey(num2); // 按照关键值大小比较
}

int main() {
    char input[100];
    fgets(input, 100, stdin); // 从标准输入读取一行字符串

    int numsList[100];
    int count = 0;

    char* token = strtok(input, ","); // 使用逗号分隔字符串
    while (token != NULL) {
        numsList[count++] = atoi(token); // 将字符串转换为整数并存入数组
        token = strtok(NULL, ","); // 继续获取下一个数字
    }

    qsort(numsList, count, sizeof(int), compare); // 使用qsort排序数组

    for (int i = 0; i < count; i++) {
        printf("%d", numsList[i]); // 输出排序后的数字
        if (i != count - 1) {
            printf(","); // 如果不是最后一个数字,则输出逗号
        }
    }

    return 0;
}

Java算法源码

import java.util.Arrays;
import java.util.Scanner;

public class Main {

    // 获取数字的十进制最低位
    static int getKey(int num) {
        num = Math.abs(num); // 去除符号
        return num % 10;
    }

    // 定义比较函数
    static class CustomComparator implements java.util.Comparator<Integer> {
        public int compare(Integer num1, Integer num2) {
            return getKey(num1) - getKey(num2);
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        scanner.close();

        String[] tokens = input.split(",");
        Integer[] numsList = new Integer[tokens.length];

        // 分割字符串并转换为整数
        for (int i = 0; i < tokens.length; i++) {
            numsList[i] = Integer.parseInt(tokens[i]);
        }

        // 使用自定义比较器对数组进行排序
        Arrays.sort(numsList, new CustomComparator());

        // 输出排序后的数组
        for (int i = 0; i < numsList.length; i++) {
            System.out.print(numsList[i]);
            if (i < numsList.length - 1) {
                System.out.print(",");
            }
        }
    }
}
最后修改:2024 年 04 月 06 日
如果觉得我的文章对你有用,请随意赞赏