2100 - 红黄蓝

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

我们现在有许多朵红色,黄色,蓝色的花

1.一束红色花束需要三朵红花

2.一束黄色花束需要三朵黄花

3.一束蓝色花束需要三朵蓝花

4.一束混合色花束需要一朵红花,一朵黄花,一朵蓝花

根据所给花朵数,计算可以获得的最大花束数


题目输入

三个整数r, g, b,中间用空格分离(0  ≤  r , gb  ≤  1000 000 000)

(r:红     g:绿    b:蓝)

题目输出

最大花束数

输入/输出样例

输入格式

3 6 9
4 4 4

输出格式

6
4

C语言解答

#include<stdio.h>
#include<string.h>
int max(int a, int b)
{
	if(a>b)
	return a;
	return b;
}
int min(int a, int b)
{
	if(a<b)
	return a;
	return b;
}
main()
{
	int r,g,b,sum[3],result,i,min1;
	while(scanf("%d%d%d",&r,&g,&b)!=EOF)
	{
		memset(sum,0,sizeof(sum));
		min1=min(min(r,g),b);
		if(min1<3)
		{
		for( i=0;i<=min1;i++)
			sum[i]=(r-i)/3+(g-i)/3+(b-i)/3+i;
		result=max(max(sum[0],sum[1]),sum[2]);
		}
		if(min1>=3)
		{
		for( i=0;i<3;i++)
			sum[i]=(r-i)/3+(g-i)/3+(b-i)/3+i;
		result=max(max(sum[0],sum[1]),sum[2]);
		}
		printf("%d\n",result);
	}
}

C++解答

#include<stdio.h>

long long  maxNum(long long a, long long  b){
    return a > b ? a : b;
}

int main(){
    int r, g, b, i, j;
    long long ans, tem;
    //freopen("1.in", "r", stdin);
	//freopen("1.out", "w", stdout);
    while(scanf("%d%d%d", &r, &g, &b) != EOF){
        ans = r / 3 + g / 3 + b / 3;
        for(i = 1; i < 3; i++){
            r--; b--; g--;
            if(r < 0 || g < 0 || b < 0){
                break;
            }
            tem = i + r / 3 + g / 3 + b / 3;
            ans = maxNum(ans, tem);
        }
        printf("%lld\n", ans);
    }
    return 0;
}