|
发表于 2023-11-18 14:58:13
|
显示全部楼层
本楼为最佳答案
问题在于内部循环的条件判断有误,导致排序部分无法正确执行。以下是修改后的代码:
- #include <stdio.h>
- int main()
- {
- int n, i, j, temp;
- int a[11];
- int sum[1100];
- while (scanf("%d", &n) != EOF && n != 0)
- {
- for (i = 0; i < n; i++)
- {
- scanf("%d", &a[ i]);
- }
- for (i = 0; i < n; i++)
- {
- int num = 0;
- int k = a[ i];
- while (k != 0)
- {
- int digit = k % 10;
- k = k / 10;
- num += digit;
- }
- sum[ i] = num;
- }
- for (i = 0; i < n - 1; i++)
- {
- for (j = 0; j < n - i - 1; j++) // 此处修改为正确的条件判断
- {
- if (sum[j] > sum[j + 1])
- {
- temp = a[j];
- a[j] = a[j + 1];
- a[j + 1] = temp;
- temp = sum[j];
- sum[j] = sum[j + 1];
- sum[j + 1] = temp;
- }
- }
- }
- for (i = 0; i < n; i++)
- {
- printf("%d ", a[ i]); // 修改为输出空格分隔的数字
- }
- printf("\n");
- }
- return 0;
- }
复制代码
主要修改包括:
1. 内部循环条件判断改为 j < n - i - 1 ,修复了循环条件错误的问题;
2. 输出每个数字后加上空格,方便区分每个排序后的数字。 |
|