[C] 三色旗问题 →→→→→进入此内容的聊天室

来自 , 2020-12-07, 写在 C, 查看 124 次.
URL http://www.code666.cn/view/7dc1c765
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. #define BLUE 'b'
  6. #define WHITE 'w'
  7. #define RED 'r'
  8.  
  9. SWAP ( int x,int y );
  10.  
  11. char color[]={'r','w','b','w','w',
  12.               'b','r','b','w','r','\0'
  13.              };
  14.  
  15. /*
  16. 三色旗问题
  17. 假设有一条绳子,上面有红、白、蓝三种颜色的旗子,起初绳子上的旗子颜色并没有顺序,您希望将之分类,并排列为蓝、白、红的顺序,要如何移动次数才会最少,注意您只能在绳子上进行这个动作,而且一次只能调换两个旗子
  18. */
  19.  
  20. int main()
  21. {
  22.  
  23.  
  24.         int wFlag=0;
  25.         int bFlag=0;
  26.         int rFlag=strlen ( color )-1;
  27.         int i;
  28.  
  29.         for ( i=0; i<strlen ( color ); i++ )
  30.                 printf ( "%c",color[i] );
  31.         printf ( "\n" );
  32.  
  33.         while ( wFlag<=rFlag )
  34.         {
  35.                 if ( color[wFlag]==WHITE )
  36.                         wFlag++;
  37.                 else if ( color[wFlag]==BLUE )
  38.                 {
  39.                         SWAP ( bFlag,wFlag );
  40.                         bFlag++;
  41.                         wFlag++;
  42.                 }
  43.                 else
  44.                 {
  45.                         while ( wFlag<rFlag&&color[rFlag]==RED )
  46.                                 rFlag--;
  47.                         SWAP ( rFlag,wFlag );
  48.                         rFlag--;
  49.                 }
  50.         }
  51.  
  52.         for ( i=0; i<strlen ( color ); i++ )
  53.                 printf ( "%c",color[i] );
  54.         printf ( "\n" );
  55.  
  56.         return 0;
  57. }
  58.  
  59. SWAP ( int x,int y )
  60. {
  61.         char temp;
  62.         temp=color[x];
  63.         color[x]=color[y];
  64.         color[y]=temp;
  65. }

回复 "三色旗问题"

这儿你可以回复上面这条便签

captcha