第 28 题
#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的排列,完成下面的判断题和单选题:
●判断题
判断题
第 28 题 该算法的输出不可能等于大于n。( )
第 29 题 该算法可能在某种合法是输入下进入死循环( )
第 30 题 若将第17行的j=i改为j=0,输出的结果不会改变( )
第 31 题 1)若输入为3 2 1 0,则输出为( )
第 32 题 若输入为10 7 1 4 3 2 5 9 8 0 6,则输出为( )
第 33 题 目前学术界已证明该算法所求解的问题的时间复杂度最优可以做到( ) 。
第 34 题 若将第13行的min改为max,将第三行的ans=20220504改为ans=0,当输入为5 4 2 3 0 1时,输出为( )。