不是VIP会员,不能显示答案

题目解答

题目:
#include<bits/stdc++.h>

using namespace std;

int n,p[10], ans=20220504;

bool check ()

{

for (int i=0; i<n-1; i++) if (p[i]>p[i+1]) return 0;

return 1;

}

void dfs(int now)

{

if (check())

{

ans=min(ans,now);

return ;

}

for (int i=0; i<n; i++)

for (int j=i; j<n; j++)

if(p[i]>p[j])

{

swap(p[i],p[j]);

dfs(now+1);

swap(p[i],p[j]);

}

}

int main()

{

cin>>n;

for (int i=0; i<n; i++) cin>>p[i];

dfs(0);

cout<<ans<<endl;

return 0;

}






假设输入的n是不超过$2^{20}$的正整数,p[0...n-1]是一个 0到n-1的排列,完成下面的判断题和单选题:

●判断题

判断题

1) 该算法的输出不可能等于大于n。( )

2) 该算法可能在某种合法是输入下进入死循环( )

3) 若将第17行的j=i改为j=0,输出的结果不会改变( )




选择题

4) 1)若输入为3 2 1 0,则输出为( )

5) 若输入为10 7 1 4 3 2 5 9 8 0 6,则输出为( )

6) 目前学术界已证明该算法所求解的问题的时间复杂度最优可以做到( ) 。

7) 若将第13行的min改为max,将第三行的ans=20220504改为ans=0,当输入为5 4 2 3 0 1时,输出为( )。
考点:
分析:
解答:
评论:
老师: