自学Python:三色旗

作者: 小强聊成长 | 来源:发表于2022-04-04 14:15 被阅读0次

    假设有一条绳子,上面有红、白、蓝三种颜色的旗子。开始时绳子上旗子的颜色并没有顺序,现在要对旗子进行分类,并按照蓝、白、红的顺序排列。需要注意的是只能在绳子上进行移动,并且一次只能调换两个旗子,则如何移动才能使旗子移动的次数最少。

    下面直接上代码:

    ########################

    def SWAP(x,y):#交换旗子

        temp=color[x]

        color[x]=color[y]

        color[y]=temp

    if __name__ == '__main__':

        WHITE = '白'

        RED = '红'

        BLUE = '蓝'

        color = ['红', '白', '蓝', '白', '白', '蓝', '红', '蓝', '白', '红']

        w, b, r = 0, 0, len(color)-1 #定义字符数组

        for i in range(len(color)):# 打印出移动前绳子上旗子的颜色

            print(color[i], end=' ')

        print()

        while w <= r:# 移动过程

            # 遇到的是白旗

            if color[w] == WHITE:

                w += 1  # 白旗指针自增1

            # 遇到的是蓝旗

            elif color[w] == BLUE:

                SWAP(b, w)  # 交换蓝旗指针和白旗指针所指向的旗子

                b += 1 # 蓝旗指针自增1

                w += 1  # 白旗指针自增1

            # 遇到的是红旗

            else:

                # 移动红旗指针使其指向当前最靠前的非红旗位置

                while w < r and color[r] == RED:

                    r -= 1 # 红旗指针自减1

                SWAP(r, w)  # 交换红旗指针和白旗指针所指向的旗子颜色

                r -= 1  # 红旗指针自减1

            for i in range(len(color)):

                print(color[i],end='')

            print()

    ########################

    执行结果如下:

    红 白 蓝 白 白 蓝 红 蓝 白 红

    白白蓝白白蓝红蓝红红

    白白蓝白白蓝红蓝红红

    白白蓝白白蓝红蓝红红

    蓝白白白白蓝红蓝红红

    蓝白白白白蓝红蓝红红

    蓝白白白白蓝红蓝红红

    蓝蓝白白白白红蓝红红

    蓝蓝白白白白蓝红红红

    蓝蓝蓝白白白白红红红

    ________________END______________

    相关文章

      网友评论

        本文标题:自学Python:三色旗

        本文链接:https://www.haomeiwen.com/subject/kdnyrrtx.html