在广袤安宁的原始森林中,快乐的蓝精灵们正在准备一年一度的蓝月亮节。而就在这欢喜忙碌的关头,他们的宿敌——邪恶的巫师格格巫和他的宠物阿兹猫闯入了蓝精灵的秘密领地。受到惊吓的蓝精灵四散而逃,其中可怜的笨笨则盲打误撞跑进了一个神秘的山洞,山洞中的守护神告诉笨笨它喜欢排好队的小朋友,换句话说蓝精灵们只要按照从矮到高排好队就可以从山洞中通过。
现在村庄里一共有n个蓝精灵,他们的身高为1~n的整数,不存在身高相同的蓝精灵。 你可以每次任意交换队伍中的蓝精灵位置,使他们的顺序变为严格升序。请你编写程序计算最少需要交换几次才能让蓝精灵们通过山洞,躲避格格巫的追捕?
输入格式:
第一行:一个正整数n(n<1000),表示蓝精灵的数量
第二行:n个正整数,用空格分开,表示目前蓝精灵的排列情况,每一个正整数表示该位置蓝精灵的身高。
输出格式:
输出一个正整数,表示至少交换多少次,才能帮助蓝精灵们通过山洞。
输入样例:
5
3 1 2 5 4
输出样例:
3
样例说明:
交换1号蓝精灵和2号蓝精灵使队伍变成1 3 2 5 4
交换2号蓝精灵和3号蓝精灵使队伍变成1 2 3 5 4
交换4号蓝精灵和5号蓝精灵使队伍变成1 2 3 4 5
交换方法不唯一,但可以得出该交换次数是最少的
常规做法:
n=int(input())
lst=list(map(int,input().split()))
count=[i for i in range(1,n+1)]
naa=0
for i in range(n):
if lst[i]!=i+1:
for j in range(n):
if lst[j]==i+1:
lst[i],lst[j]=lst[j],lst[i]
naa+=1
if lst==count:
break
print(naa)
结合算法思想的做法:
n = eval(input())
l = list(map(int, input().split()))
sum = 0
for i in range(n):
for j in range(i + 1, n):
if l[i] > l[j] == min(l[i + 1:]):
l[i], l[j] = l[j], l[i]
sum += 1
print(sum)