链接:https://ac.nowcoder.com/acm/contest/26478/J 来源:牛客网
法一: 将题目所给数据放在函数里,每次k变换时调用函数得到一个字符串,并与k未变化前得到的字符串相比,相同不做处理,不同则按要求输出,并且每场结束后输出最后一次k变化得到的字符串(自成一行)
using namespace std;
string pan(int k) {
string s;
if (k >= 3000)
s = "Legendary grandmaster";
else if (k >= 2600)
s = "International grandmaster";
else if (k >= 2400)
s = "Grandmaster";
else if (k >= 2300)
s = "International master";
else if (k >= 2100)
s = "Master";
else if (k >= 1900)
s = "Candidate master";
else if (k >= 1600)
s = "Expert";
else if (k >= 1400)
s = "Specialist";
else if (k >= 1200)
s = "Pupil";
else
s = "Newbie";
return s;
}
int main() {
int n, m, k, a;
string s1, s2;
cin >> n;
while (n--) {
cin >> m >> k;
while (m--) {
cin >> a;
s1 = pan(k);
k += a;
s2 = pan(k);
if (s1 != s2)
cout << s1 << " -> " << s2 << endl;
}
cout << s2 << endl;
}
return 0;
}
总结:数据量大,并且需要多次判断时,用调用函数的方法解决
法二: 借用map容器,将每个整型数值k映射到相对应的字符串,这样就实现了k与字符串之间的联系
using namespace std;
int main(){
map<int,string>mp;
for(int i=-12000;i<1200;i++)mp[i]="Newbie";
for(int i=1200;i<=1399;i++)mp[i]="Pupil";
for(int i=1400;i<=1599;i++)mp[i]="Specialist";
for(int i=1600;i<=1899;i++)mp[i]="Expert";
for(int i=1900;i<=2099;i++)mp[i]="Candidate master";
for(int i=2100;i<=2299;i++)mp[i]="Master";
for(int i=2300;i<=2399;i++)mp[i]="International master";
for(int i=2400;i<=2599;i++)mp[i]="Grandmaster";
for(int i=2600;i<=2999;i++)mp[i]="International grandmaster";
for(int i=3000;i<=40000;i++)mp[i]="Legendary grandmaster";
int n;
cin>>n;
while(n--){
int m,k,a,d;
cin>>m>>k;
while(m--){
cin>>a;
d=k+a;
if(mp[d]!=mp[k])
cout<<mp[k]<<" -> "<<mp[d]<<endl;
k+=a;
}
cout<<mp[d]<<endl;
}
return 0;
}