mamaaini 发表于 2023-11-19 12:28:20

有的输出不对

输入10个整数,将它们从小到大排序后输出,并给出现在每个元素在原来序列中的位置。
#include <stdio.h>
int main()
{
    int i,j,temp,arr,position;
    for(i=0;i<10;i++)
    {
      scanf("%d", &arr);
      position=i+1;
    }
    for(i=0;i<9;i++)
   {
      for(j=0;j<10-i-1;j++)
         {
            if(arr>arr)
             {
                temp=arr;
                arr=arr;
                arr=temp;
                temp=position;
                position=position;
                position=temp;
            }
      }
    }
    for(i=0;i<9;i++)
    {
      printf("%d ",arr);
    }
    printf("%d\n",arr);
    for(i=0;i<9;i++)
    {
      printf("%d ",position);
    }
    printf("%d",position);
    return 0;
}

isdkz 发表于 2023-11-19 12:28:29

问题在于第二个循环的终止条件应该是 i<10 而不是 i<9 。这是因为在内部循环中, j 的终止条件是 10-i-1 ,所以外部循环应该执行10次而不是9次,以确保所有的元素都被比较和交换。此外,应该在外部循环中使用 i 作为终止条件,而不是 9 。

下面是修改后的代码:

#include <stdio.h>
int main()
{
    int i,j,temp,arr,position;
    for(i=0;i<10;i++)
    {
      scanf("%d", &arr[ i]);
      position[ i]=i+1;
    }
    for(i=0;i<10;i++)
    {
      for(j=0;j<10-i-1;j++)
      {
            if(arr>arr)
            {
                temp=arr;
                arr=arr;
                arr=temp;
                temp=position;
                position=position;
                position=temp;
            }
      }
    }
    for(i=0;i<9;i++)
    {
      printf("%d ",arr[ i]);
    }
    printf("%d\n",arr);
    for(i=0;i<9;i++)
    {
      printf("%d ",position[ i]);
    }
    printf("%d",position);
    return 0;
}


这样修改后的代码将正确地对输入的10个整数进行排序,并输出排序后的结果以及每个元素在原序列中的位置。

Mike_python小 发表于 2023-11-19 12:28:58

在你的代码中,排序部分逻辑看起来是正确的。但是在输出位置时存在一个问题,因为数组下标是从0开始的,所以在记录元素位置时,position = i + 1应该改为position = i。这样才能正确记录元素在原来序列中的位置。

这是修改后的代码:


#include <stdio.h>

int main() {
    int i, j, temp, arr, position;
    for (i = 0; i < 10; i++) {
      scanf("%d", &arr);
      position = i;
    }
    for (i = 0; i < 9; i++) {
      for (j = 0; j < 10 - i - 1; j++) {
            if (arr > arr) {
                temp = arr;
                arr = arr;
                arr = temp;
                temp = position;
                position = position;
                position = temp;
            }
      }
    }
    for (i = 0; i < 9; i++) {
      printf("%d ", arr);
    }
    printf("%d\n", arr);
    for (i = 0; i < 9; i++) {
      printf("%d ", position);
    }
    printf("%d", position);
    return 0;
}


现在代码应该能够正确地对输入的10个整数进行排序,并输出排序后的数组以及每个元素在原来序列中的位置。如果有其他问题或疑问,请随时告诉我。
页: [1]
查看完整版本: 有的输出不对