|
发表于 2023-11-18 14:35:40
|
显示全部楼层
本楼为最佳答案
问题出在第二个for循环的内部。在计算每个数字的各位数字之和时,应该使用一个新的变量来存储,而不是直接使用sum[ i]。因为sum数组没有初始化,所以在使用之前应该将其初始化为0。此外,在第三个for循环中,内部的第二个for循环中的j应该是从0开始,而不是从i开始。下面是修改后的代码:
- #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 digitSum = 0; // 新增变量用于存储各位数字之和
- int num = a[ i]; // 临时存储a[ i]的值
- while (num != 0) {
- int digit = num % 10;
- num = num / 10;
- digitSum += digit;
- }
- sum[ i] = digitSum; // 将各位数字之和存入sum数组
- }
- 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;
- // 交换a数组中的元素
- temp = sum[j];
- sum[j] = sum[j + 1];
- sum[j + 1] = temp;
- // 交换sum数组中的元素
- }
- }
- }
- for (i = 0; i < n; i++) {
- printf("%d\n", a[ i]);
- }
- }
- return 0;
- }
复制代码 |
|