有的输出不对
输入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;
}
问题在于第二个循环的终止条件应该是 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个整数进行排序,并输出排序后的结果以及每个元素在原序列中的位置。 在你的代码中,排序部分逻辑看起来是正确的。但是在输出位置时存在一个问题,因为数组下标是从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]