早教吧 育儿知识 作业答案 考试题库 百科 知识分享

c++编程问题给定任意顺序的5个互不相同的数字,例如2,5,4,3,1。现要求通过两两交换,用最少的交换次数使数列还原为升序(1,2,3,4,5),问最少的交换次数和交换策略。用c++编程。

题目详情
c++编程问题
给定任意顺序的5个互不相同的数字,例如2,5,4,3,1。现要求通过两两交换,用最少的交换次数使数列还原为升序(1,2,3,4,5),问最少的交换次数和交换策略。用c++编程。
▼优质解答
答案和解析
#include
using namespace std;
int main()
{
int a[5];
int b,c=0,j,k=0;
for(b=0;b<5;++b)
cin>>a[b];
for(int i=0;i<4;++i)
{ c=i;
for(j=i+1;j<5;++j)
if(a[c]>a[j])
c=j;
if(a[c] {int t=a[c];
a[c]=a[i];
a[i]=t;
++k;
}}
cout< for(int i=0;i<5;++i)
cout< return 0;
}
策略:第一个数与后面的数逐个比较,遇到更小的 记下下标,第一轮比较四次,用第一个和最小的交换。
第二个数与后面的数逐个比较,遇到更小的 记下下标,第二轮比较三次,用第二个和最小的交换
以此类推实际交换次数不超过4次
楼上的程序每次遇到小的都交换一次,并非最少次数,楼上的只要换组初始数据就是错误答案