Codechef - Maximize Colours(IQ)

codechef,maximize,colours,iq · 浏览次数 : 3

小编点评

```c++ #include #include #include using namespace std; void solve() { int a[3]; cin > for (int i = 0; i < 3; ++i) cin > a[i]; sort(a, a + 3, greater&()); int res = 0; if (a[0] > 1 && a[1] > 1) { ++res; --a[0], --a[1]; } else if (a[1] > 1 && a[2] > 1) { ++res; --a[2], --a[1]; } else if (a[2] > 1 && a[0] > 1) { ++res; --a[2], --a[0]; } for (int i = 0; i < 3; ++i) { if (a[i]) ++res; } cout << res << endl; } int main() { solve(); return 0; } ```

正文

题目大意

  有红绿蓝三种颜色,三种颜色当中任意两个颜色混合都可以产生出一个新的颜色(然而混合产生的颜色不能与任何其它的颜色进行混合)。输入三个整数,分别代表红色,绿色,蓝色的颜色个数(每次混合各消耗一个颜色数目),求出能获得的最大颜色数量。

 

思路

  举几个样例找找规律。比如说(1,1,0),原本有两种颜色 ,如果混合后就只剩下一种颜色;还有(1,2,0)这种情况,混合后还是两种颜色,数目没有发生变化。所以想法是不和数目为1的颜色混合(因为混合后数目不变,甚至可能减少)。注意要降序排序,结合代码理解这两个的区别(5,2,2)和(2,2,5)。

 

代码

void solve() {
    int res = 0;
    for (int i = 0; i < 3; ++i) cin >> a[i];
    sort(a, a + 3, greater<int>());
    if (a[0] > 1 && a[1] > 1) {
        ++res;
        --a[0], --a[1];
    }
    if (a[1] > 1 && a[2] > 1) {
        ++res;
        --a[2], --a[1];
    }
    if (a[2] > 1 && a[0] > 1) {
        ++res;
        --a[2], --a[0];
    }
    for (int i = 0; i < 3; ++i) {
        if (a[i]) ++res;
    }
    cout << res << endl;
}

 

题目链接在这里:Maximize Colours - Problems - CodeChef

与Codechef - Maximize Colours(IQ)相似的内容: