解题思路:
根据C++代码的思路写的Python代码。
3个字母有6种排列方式。对于任意一种方式进行求解,然后取出最小值。例如BAT,先得出要放B的位置上有多少个数非B,然后这些位置是和后面的AT交换的,A要先和在A区间上的B交换,没有了就放到T的区间上,然后再是A和T交换。
A的非a部分是一定会交换到B和C上的(即ab,at)。
在A区的b(ab)和B区的a(ba)交换时,A区的b的个数不一定够(ab<ba),只能将A 区的t交换到B区,而这一部分(ba-ab)最后还要与B区的t一起到t区(bt+ba-ab),此时总次数。
A区的b(ab)和B区的a(ba)交换时,A区的b的个数够用甚至有余(ab>=ba),A区的b除了交换到B区,还会交换到T区,这一部分b(ab-ba)最终会被换成t,交换数量上是bt的一部分,所以交换的次数是bt。
所以最后每次循环交换的次数c=ab+at+bt +ba-min(ba,ab)。
参考代码:
s=list(input()) le=len(s) m=s[:] sl=['ABT','ATB','BAT','BTA','TAB','TBA'] ans=[] for i in range(6): c=0 s=m a,b,t=sl[i][0],sl[i][1],sl[i][2] an,bn=s.count(a),s.count(b) ab,at=s[0:an].count(b),s[0:an].count(t) ba,bt=s[an:an+bn].count(a),s[an:an+bn].count(t) c=ab+at+bt+ba-min(ba,ab) ans.append(c) print(min(ans))
0.0分
2 人评分
C语言程序设计教程(第三版)课后习题3.7 (C++代码)浏览:988 |
数列 (C++代码)浏览:664 |
C语言训练-求函数值 (C语言代码)浏览:573 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:640 |
三角形 (C++代码)记忆化搜索浏览:1222 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)from DQM浏览:653 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:543 |
复数求和 (C语言代码)浏览:920 |
C语言程序设计教程(第三版)课后习题12.3 (C语言代码)浏览:542 |
1197求助浏览:629 |