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);
      }
    }

  • 相关阅读:
    js 生成指定范围之内的随机数
    vue项目在ie浏览器打开做提示
    vue 瀑布流组件
    docker 移动文件到其他目录
    学习hyperf遇到的问题
    Linux 部署elasticsearch
    Git 常用命令
    Linux svn定时更新
    eclipse 导入web项目后,线程假死
    向量基本概念
  • 原文地址:https://www.cnblogs.com/kimyong/p/5943386.html
Copyright © 2011-2022 走看看