1.3 RGB

一.小知识点

        1.c++自带min/max函数

                a.求a,b中较小/大的元素

                        03e00ad59688414db620ba1bc446f497.png

                b.求数组中的最小/大元素

                        1> C=max('a','z');

                        2> C = max(A);     //求数组A的最大元素

                        3> C = max(A, B); //要求数组A和数组B的长度相同,返回一个与之等长的数组,其值为A,B每个位置的最大值

                                    b920ff815501447a85e679a08e9ac817.png

        2.不间断地输入字符串:

                char a[111];

                while(scanf("%s",a)!=EOF){ ... }

        3.区别: i=0;j=i+1(注意要以 j 来判断循环退出条件!!(因为以i很容易让j数组下标越界))

                双重循环有两个变量:元素中的每一个都要和其它元素比较。

                单重循环有两个变量:第一个和第二个比较、第二个和第三个比较...

        4.这题模拟,不用实质交换!

 

 二.题目

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3dlZXQtPnN3ZWF0,size_20,color_FFFFFF,t_70,g_se,x_16

三.代码

#include <bits/stdc++.h>
using namespace std;
char a[11111];
int main()
{
	while(scanf("%s",a)!=EOF){
		int r=0,g=0,b=0,i,j,k,result=0;
		int r1=0,r2=0,g1=0,g2=0,b1=0,b2=0;//记录r,g,b三个区域分别有多少个另外的两个字母 
		int rg=0,rb=0,gb=0;分别记录r,g,b三个区域的交换次数 
		int n=strlen(a);
		for(i=0;i<n;i++){//确定r,g,b三个区域的大小 
			if(a[i]=='R') r++;
			else if(a[i]=='G') g++;
			else if(a[i]=='B') b++;
		}
		for(i=0;i<r;i++){//计算三个区域分别有多少个另外的两个字母 
			if(a[i]=='G') r1++;
			else if(a[i]=='B') r2++;
		}
		for(i=r;i<r+g;i++){
			if(a[i]=='R') g1++;
			else if(a[i]=='B') g2++;
		} 
		for(i=r+g;i<n;i++){
			if(a[i]=='R') b1++;
			else if(a[i]=='G') b2++;
		} 
		rg=min(r1,g1);
		rb=min(r2,b1);
		gb=min(b2,g2); 
		result=rg+rb+gb;
		int re1=r-rg-rb;//把r区中交换过的r减去 
		int re2=r-g1-b1;//把r区中剩下的r减去 
		printf("%d\n",result+(re1-re2)*2);
	} 		
	return 0;
}

 

        

         

 

                                

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小吴同学·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值