zoukankan      html  css  js  c++  java
  • 三色旗

    趣味算法-三色旗

    一条绳子挂红白蓝三种颜色的旗子,且排列无序,现用程序把三种旗子同色归类,顺序为红-白-蓝,每次只能交换2面旗子,采用最少步骤完成。

    算法描述:只需把红色和蓝色的旗子进行交换,红旗和篮旗都就位后,白旗自然就位。

    1) 从前向后设定红旗的最后位置,如果该位置不是红旗,向后扫描旗子队列,如果发现红旗则与当前红旗位置的旗子交换。

    2) 如果该位置是红旗,则向后移动红旗的最后位置。

    3) 从后向前设定篮球的最前位置,如果该位置不是蓝旗,向前扫描旗子队列,如果发现蓝旗则与当前红旗位置的旗子交换。

    4) 如果该位置是蓝旗,则向前移动蓝旗的最后位置。

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;

    /**
    * 三色旗
    *
    * @author Administrator
    *
    */
    public class ThreeColorsFlags {
      public void swap(char[] flags, int x, int y) {
      char temp;
      temp = flags[x];
      flags[x] = flags[y];
      flags[y] = temp;
      }

      public String move(char[] flags) {
        int bFlag = 0;
        int wFlag = 0;
        int rFlag = flags.length - 1;
        while (wFlag <= rFlag) {
          if (flags[wFlag] == 'W') {
            wFlag++;
          } else if (flags[wFlag] == 'B') {
          swap(flags, bFlag, wFlag);
          bFlag++;
          wFlag++;
          } else {
            while (wFlag < rFlag && flags[rFlag] == 'R')
                rFlag--;
            swap(flags, rFlag, wFlag);
            rFlag--;
          }
        }
        return new String(flags);
      }

      public static void main(String[] args) throws IOException {
        BufferedReader buf = new BufferedReader(
        new InputStreamReader(System.in));
        System.out.println("输入三色旗的顺序(ex.RWBBWRWR):");
        String flags = buf.readLine();
        ThreeColorsFlags threeColorsFlags = new ThreeColorsFlags();
        flags = threeColorsFlags.move(flags.toUpperCase().toCharArray());
        System.out.println("移动顺序后:" + flags);
      }
    }

  • 相关阅读:
    Sqlserver中 登录用户只能看到自己拥有权限的库
    数据库的快照隔离级别(Snapshot Isolation)
    (0.2.4)Mysql安装——yum源安装
    sql server动态行列转换
    yum源的报错排除
    sql server dba概念系列引用
    (4.18)数据压缩
    如何查看windows某个目录下所有文件/文件夹的大小?(TreeSize Free)
    持续集成
    PM加油站
  • 原文地址:https://www.cnblogs.com/kimyong/p/5943386.html
Copyright © 2011-2022 走看看