yueyufeng 发表于 2023-11-18 14:35:28

没有输出

isdkz 发表于 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;
    int sum;

    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 > sum) {
                  temp = a;
                  a = a;
                  a = temp;
                  // 交换a数组中的元素
                  temp = sum;
                  sum = sum;
                  sum = temp;
                  // 交换sum数组中的元素
                }
            }
      }

      for (i = 0; i < n; i++) {
            printf("%d\n", a[ i]);
      }
    }
    return 0;
}

Mike_python小 发表于 2023-11-18 14:36:18

对不起,我误解了你的意思。以下是修改后的C程序:


#include <stdio.h>

int main() {
    int n, i, j, temp;
    int a;
    int sum;

    while (scanf("%d", &n) != EOF && n != 0) {
      for (i = 0; i < n; i++) {
            scanf("%d", &a);
      }
      for (i = 0; i < n; i++) {
            int digit_sum = 0;
            int num = a;
            while (num > 0) {
                digit_sum += num % 10;
                num /= 10;
            }
            sum = digit_sum;
      }
      for (i = 0; i < n - 1; i++) {
            for (j = 0; j < n - i - 1; j++) {
                if (sum > sum) {
                  temp = a;
                  a = a;
                  a = temp;
                  temp = sum;
                  sum = sum;
                  sum = temp;
                }
            }
      }
      for (i = 0; i < n; i++) {
            printf("%d\n", a);
      }
    }
    return 0;
}


这个修改后的程序应该可以正确地根据各位数字之和从小到大进行排序。希望对你有所帮助!
页: [1]
查看完整版本: 没有输出