返回目录
题目描述
给定一个非空数组(列表),其元素数据类型为整型,请按照数组元素十进制最低位从小到大进行排序,十进制最低位相同的元素,相对位置保持不变。
当数组元素为负值时,十进制最低位等同于去除符号位后对应十进制值最低位。
输入描述
- 给定一个非空数组,其元素数据类型为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(",");
}
}
}
}
3 条评论
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]