1.题意:
在几个分数段,分别有不同的气球颜色,而 >=3200 这个区间,可以选择任意颜色,问最多和最少呈现的颜色。
2.思路:
首先开一个res数组,根据输入分数的区间,对res数组赋值,模拟气球颜色。接着把 >=3200 的这段特殊区间隔离开,开一个flag标记数组,令cnt = 0计数,找过的区间段用flag标记,不再进行颜色个数cnt的累加,这样得到的cnt是,除去 >=3200 这段区间的分数外,气球颜色的计数。接着对>= 3200的分数计数,如果所有分数都>=3200,那最大值就是分数数组元素个数,最小值就是1,否则,最大值就是刚才的cnt加上>=3200元素个数,最小值就是cnt。
3.代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int n;
int minx, maxx;
int a[122];
int res[122];
bool flg[122];
int main() {
while(~scanf("%d",&n)) {
memset(flg, 0,sizeof(flg));
memset(a, 0, sizeof(a));
memset(res, 0,sizeof(res));
int cnt = 0;
for(int i = 1; i <= n;i++) scanf("%d", &a[i]);
for(int i = 1; i <= n;i++) {
if(a[i] >= 1&& a[i] <= 399) res[i] = 1;
else if(a[i] >=400 && a[i] <= 799) res[i] = 2;
else if(a[i] >=800 && a[i] <= 1199) res[i] = 3;
else if(a[i] >=1200 && a[i] <= 1599) res[i] = 4;
else if(a[i] >=1600 && a[i] <= 1999) res[i] = 5;
else if(a[i] >=2000 && a[i] <= 2399) res[i] = 6;
else if(a[i] >=2400 && a[i] <= 2799) res[i] = 7;
else if(a[i] >=2800 && a[i] <= 3199) res[i] = 8;
else res[i] = 9;
}
for(int i = 1; i <= n;i++) {
if(res[i] != 9&& flg[res[i]] == 0) {
flg[res[i]] =1;
cnt++;
}
}
int c = 0;
for(int i = 1; i <= n;i++) {
if(res[i] == 9) c++;
}
if(c == n) minx = 1;
else minx = cnt;
int t = 0;
for(int i = 1; i <= n;i++){
if(res[i] == 9) t++;
}
maxx = cnt + t;
printf("%d%d\n", minx, maxx);
}
}