基础训练——荷兰国旗问题

时间:2019-03-25
本文章向大家介绍基础训练——荷兰国旗问题,主要包括基础训练——荷兰国旗问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目大意:

输入R,W,B组成的打乱顺序的字符串,以R,W,B的顺序来输出

1.以前的思路循环一遍计数,循环输出

2.看见书上的算法很巧妙,解决方法:三个指针r,b,p.r指针和p指针指向开头,b指向尾部,如果p指针是指向的R那么就是和r指针指向的换位置,p++,r++都向右边移一个位置,如果是B那么同理和b指针交换,那么b--,向左边移一位,如果是W那么就p移动,如果p碰到b,就交换结束。

 1 #include<iostream>
 2 #include<cstring> 
 3 using namespace std;
 4 int main(){
 5     int b,r,n,len,p,j;
 6     char flag[100];
 7     cin>>n;
 8 
 9     for(j = 0;j<n;j++){
10         cin>>flag;
11         len = strlen(flag);
12         r = 0,b = len-1,p=0;
13         while(p<=b){
14             if(flag[p]=='R'){
15                 flag[p] = flag[r];
16                 flag[r] = 'R'; 
17                 p++;
18                 r++; 
19             }
20             else if(flag[p]=='B'){
21                 flag[p] = flag[b];
22                 flag[b] = 'B';
23                 b--;
24             } 
25             else{
26                 p++;
27             }
28         }
29         for(int i=0;i<strlen(flag);i++){
30             cout<<flag[i];
31         }
32         cout<<endl;
33         
34     }
35     
36     
37     
38     
39     
40     return 0;
41 }