三色旗

来源:互联网 发布:网络大电影备案流程 编辑:程序博客网 时间:2024/04/26 07:37
Code:
  1. #include <iostream>   
  2. #include <algorithm>   
  3. using namespace std;   
  4.   
  5. const char BLUE = 'b';   
  6. const char WHITE = 'w';   
  7. const char RED = 'r';   
  8.   
  9. template <typename Type>   
  10. struct Print   
  11. {   
  12.     void operator ()(Type& item)   
  13.     {   
  14.         cout << item << '/t';   
  15.     }   
  16. };   
  17.   
  18. //三色旗按蓝白红排列    
  19.   
  20. int main(int argc, char *argv[])   
  21. {   
  22.     char color[] = {'w','r','b','w''b''b','w','w','r'};   
  23.        
  24.     int bflag = 0;   
  25.     int wflag = 0;   
  26.     int rflag = strlen(color) - 1;   
  27.        
  28.     for_each(color, color + sizeof(color), Print<char>());   
  29.     cout << endl;   
  30.     while (wflag <= rflag)     
  31.     {   
  32.         if (BLUE == color[wflag])   
  33.         {   
  34.             swap(color[bflag], color[wflag]);   
  35.             ++bflag;   
  36.         }   
  37.         else if (RED == color[wflag])   
  38.         {   
  39.             while ((wflag < rflag) && (RED == color[rflag]) )   
  40.             {   
  41.                 --rflag;   
  42.             }   
  43.             swap(color[wflag], color[rflag]);      
  44.             --rflag;   
  45.             --wflag;   
  46.         }   
  47.            
  48.         ++wflag;   
  49.     }   
  50.        
  51.     for_each(color, color + sizeof(color), Print<char>());   
  52.     cout << endl;   
  53.            
  54.     return 0;   
  55. }   
  56.   
  57. /*  
  58. w       r       b       w       b       b       w       w       r  
  59. b       b       b       w       w       w       w       r       r  
  60. */