2100 - 红黄蓝
时间限制 : 1 秒
内存限制 : 128 MB
我们现在有许多朵红色,黄色,蓝色的花
1.一束红色花束需要三朵红花
2.一束黄色花束需要三朵黄花
3.一束蓝色花束需要三朵蓝花
4.一束混合色花束需要一朵红花,一朵黄花,一朵蓝花
根据所给花朵数,计算可以获得的最大花束数
题目输入
三个整数r, g, b,中间用空格分离(0 ≤ r , g,b ≤ 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; }