红绿蓝

题目描述:
蒜头君有一个罐子,里面装着红的、绿的、蓝的玻璃珠若干,分别用R、G、B表示。蒜头君希望把它们排成一行,并且按照字典序排列(即B->G->R的顺序).然后以一红二绿三蓝为一组串成一串幸运珠,多余的放回罐子里,那么他能串成多少串幸运珠呢?
输入格式
输入为一行,是一个由若干个R、G、B乱序组成的字符串,长度小于10000,每个字母至少出现一次。
输出格式
·输出共2行;
·第1行是排序完成后的字符串;
·第2行是一个整数,为串成的幸运珠的数目。

image.png

思路:
注意字符串的排序,与数组的排序不同。
代码:

#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;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容