基础训练——荷兰国旗问题
题目大意:
输入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 }