早教吧作业答案频道 -->其他-->
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++编程。
给定任意顺序的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次
楼上的程序每次遇到小的都交换一次,并非最少次数,楼上的只要换组初始数据就是错误答案
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次
楼上的程序每次遇到小的都交换一次,并非最少次数,楼上的只要换组初始数据就是错误答案
看了c++编程问题给定任意顺序的5...的网友还看了以下:
有200盏亮着的电灯,各有一个拉线开关控制着.现按其顺序编号为1,2,3,…,200,然后先将编号 2020-06-25 …
有2000盏亮着的灯,各有一个拉线开关控制,现按其顺序编号为1,2,3,…,2000,然后将编号为 2020-06-25 …
有1997盏亮着的电灯,各有一个拉线开关控制着,现按其顺序编号为l,2,…,1997,然后将编号为 2020-06-25 …
2006盏亮着的灯,各有一个拉线开关控制,按顺序编号为1,2,3...,2006.将编号为2的倍数 2020-06-25 …
有2000盏亮着的电灯,各有一个拉线开关控制着.现按其顺序编号为1,2,3,…,2000,然后将编 2020-07-12 …
有2007盏亮着的电灯,各有一个拉线开关控制着,现按其顺序编号为1,2,……,2005,2006, 2020-07-12 …
12.有2000盏亮着的电灯,各有一个拉线开关控制着,现按其顺序编号为1.2.3.2000,然后将编 2020-10-30 …
1...有2000盏亮着的灯,各有一个拉线开关控制者,现按其顺序编号为1、2、3……2000,然后将 2020-11-10 …
2010盏亮着的电灯,各有一个拉线开关控制,按顺序编号为l,2,…,2010.将编号为2的倍数的灯的 2020-11-10 …
用哈夫曼编码的哈夫曼树中,最下面的二叉树的两个叶子用来放权(概率)最低的两个编码,然后相加后向上一层 2021-01-02 …