题目描述:
蒜头君有一个罐子,里面装着红的、绿的、蓝的玻璃珠若干,分别用R、G、B表示。蒜头君希望把它们排成一行,并且按照字典序排列(即B->G->R的顺序).然后以一红二绿三蓝为一组串成一串幸运珠,多余的放回罐子里,那么他能串成多少串幸运珠呢?
输入格式
输入为一行,是一个由若干个R、G、B乱序组成的字符串,长度小于10000,每个字母至少出现一次。
输出格式
·输出共2行;
·第1行是排序完成后的字符串;
·第2行是一个整数,为串成的幸运珠的数目。
思路:
注意字符串的排序,与数组的排序不同。
代码:
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int main(){
string s;
cin>>s;
int n = s.size();
int Bcnt = 0;
int Gcnt = 0;
int Rcnt = 0;
sort(s.begin(),s.end());
cout<<s<<endl;
for(int i =0; i < n;i++){
if(s[i]=='B'){
Bcnt++;
}else if(s[i]=='G'){
Gcnt++;
}else{
Rcnt++;
}
}
int cnt = Bcnt/3;
if(Gcnt/2<cnt)
cnt = Gcnt/2;
if(Rcnt < cnt)
cnt = Rcnt;
cout <<cnt<<endl;
return 0;
}