|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目描述
输入10个整数,将它们从小到大排序后输出,并给出现在每个元素在原来序列中的位置。
输入描述
输入数据有一行,包含10个整数,用空格分开。
输出描述
输出数据有两行,第一行为排序后的序列,第二行为排序后各个元素在原来序列中的位置。
- #include<bits/stdc++.h>
- using namespace std;
- int main()
- {
- int a[10],b[10],i,j,t;
- for(i=0;i<10;i++)
- {cin>>a[i];b[i]=i+1;}
- for(i=0;i<9-1;i++)
- {
- for(j=0;j<9-1-i;j++)
- {
- if(a[j]>a[j+1])
- {
- t=a[j];a[j]=a[j+1];a[j+1]=t;
- t=b[j];b[j]=b[j+1];b[j+1]=t;
- }
- }
- }
- for(i=0;i<10;i++)
- cout<<a[i]<<' ';
- cout<<endl;
- for(i=0;i<10;i++)
- cout<<b[i]<<' ';
- }
复制代码
问题在于排序的循环条件和循环次数不正确。在代码中,排序的循环条件是 i<9-1 ,但实际上应该是 i<10-1 ,因为数组有10个元素。此外,排序的循环次数也不正确,应为 9-i 而不是 9-1-i 。
正确的代码如下:
- #include<bits/stdc++.h>
- using namespace std;
- int main()
- {
- int a[10],b[10],i,j,t;
- for(i=0;i<10;i++)
- {
- cin>>a[ i];
- b[ i]=i+1;
- }
- for(i=0;i<10-1;i++)
- {
- for(j=0;j<10-1-i;j++)
- {
- if(a[j]>a[j+1])
- {
- t=a[j];
- a[j]=a[j+1];
- a[j+1]=t;
- t=b[j];
- b[j]=b[j+1];
- b[j+1]=t;
- }
- }
- }
- for(i=0;i<10;i++)
- cout<<a[ i]<<' ';
- cout<<endl;
- for(i=0;i<10;i++)
- cout<<b[ i]<<' ';
- }
复制代码
这样修改后,代码就能正确地对输入的10个整数进行排序,并输出排序后的序列以及每个元素在原来序列中的位置。
|
|