题目链接:点击打开链接
题意:给你 T 组样例,每组样例以数字 n 开始,接着是 n 个数,经过s = 10000-(100-输入的数字)^ 2 变化,找出出现次数最多的数,若有多组样例,从小到大输出,若每组样例出现的次数一样,则输出 “Bad Mushroom”。
题解:
1,找出出现次数的最大值和最小值;
2,遍历所有的数,找出出现最大次数的数字存到 vertor 容器内(可以控制结果输出的大小);
3,判断出现的最大次数和最小次数是否相等,如果相等,则输出“Bad Mushroom”,如果不相等就输出结果;
#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <iomanip>
#include <map>
#include <vector>
using namespace std;
int n;
int nuu[10005];
int s[10000005];
int main()
{
int kase=1,t,T;
cin>>T;
while(T--){
cin>>n;
memset(nuu,0,sizeof(nuu));
for(int i=0;i<n;i++){
scanf("%d",&t);
s[i]=10000-(100-t)*(100-t);
nuu[s[i]]++;
}
vector<int> s;
int maxx=-1;
int minn=20000000;
for(int i=0;i<=10000;i++){
if(nuu[i]){
maxx=max(maxx,nuu[i]);
minn=min(minn,nuu[i]);
}
}
int k=0;
for(int i=0;i<=10000;i++){
if(nuu[i]==maxx){
s.push_back(i);
k++;
}
}
printf("Case #%d:\n",kase++);
if(minn==maxx&&s.size()!=1)
puts("Bad Mushroom");
else{
int kk=0;
vector<int>::iterator it;
for(it=s.begin();it!=s.end();it++){
if(kk==0) cout<<*it;
else cout<<" "<<*it;
kk++;
}
cout<<endl;
}
}
return 0;
}