还是没有输出
问题在于内部循环的条件判断有误,导致排序部分无法正确执行。以下是修改后的代码:#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 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 > sum)
{
temp = a;
a = a;
a = temp;
temp = sum;
sum = sum;
sum = temp;
}
}
}
for (i = 0; i < n; i++)
{
printf("%d ", a[ i]);// 修改为输出空格分隔的数字
}
printf("\n");
}
return 0;
}
主要修改包括:
1. 内部循环条件判断改为j < n - i - 1 ,修复了循环条件错误的问题;
2. 输出每个数字后加上空格,方便区分每个排序后的数字。 你的代码中有一些小错误,我已经帮你修改了一下,可以试着运行一下看看:
#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 num = 0;
int k = a;
while (k != 0) {
int j = k % 10;
k = k / 10;
num += j;
}
sum = num;
}
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 ", a);
}
printf("\n");
}
return 0;
}
现在代码已经修改过了,应该可以按要求输出结果了。
页:
[1]