在线编译器 C

#include <stdio.h> int main() { int arr[10]; for (int i = 0; i < 10; i++) { if (scanf("%d", &arr[i]) != 1) { return 0; } } for (int i = 0; i < 10 - 1; i++) { for (int j = 0; j < 10 - i - 1; j++) { int last_digit1 = arr[j] % 10; int last_digit2 = arr[j + 1] % 10; if (last_digit1 > last_digit2) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } for (int i = 0; i < 10; i++) { printf("%d", arr[i]); if (i < 9) { printf(" "); } } printf("\n"); return 0; }
这段代码实现了一个冒泡排序,但排序的依据是每个整数的个位数字(最后一位)。程序读取10个整数,然后按照它们的个位数从小到大排序,最后输出排序后的数组。

代码逻辑基本正确,但有一个潜在问题需要注意:

- 当处理负数时,`% 10` 的结果可能是负数(例如 `-7 % 10` 在C语言中结果是 `-7`)。这会导致排序比较时出现意外行为,因为负数的个位数字比较可能不符合预期。你需要考虑如何处理负数的个位数字,使其始终得到非负的个位值。