code1 20分
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
int a[1000] = { 0 }, n,position1=0,position2=0,teamnum=0,score=0;
cin >> n;
cin.ignore();
string s;
for (int i = 0; i < n; i++) {
getline(cin, s);
position1 = s.find("-");
position2 = s.find(" ");
teamnum = stoi(s.substr(0, position1));
score = stoi(s.substr(position2 + 1));
a[teamnum] += score;
}
for (int i = 0; i < 1000; i++) {
if (a[i] == *max_element(a, a + 1000)) {
cout << i << " " << a[i];
}
}
return 0;
}
这个题最重要的是:
1.cin.ignore()的使用,在cin之后,缓冲区中有回车键。而如果不使用cin.ignore(),那么getline会读入回车键。导致数据无法读入.一定要记住,这次又因为这个丢脸了o(╥﹏╥)o
2.而且,cin.ignore()不能放入循环中,如果这样。getline()会读取留缓存区的换行符导致直接换行。getline换行之后,cin.ignore()就会读string的第一个元素。
3.substr的区间是s.substr(0,position1)的意思是以0开始,position的长度。
code2 20分
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int m[1000] = { 0 };
int n,tnum, dnum, score;
cin >> n;
for (int i = 0; i < n; i++) {
scanf_s("%d-%d %d", &tnum, &dnum, &score);
m[tnum] += score;
}
for (int i = 0; i < 1000; i++) {
if (m[i] == *max_element(m, m + 1000)) {
cout << i << " " << m[i];
break;
}
}
return 0;
}
直接利用harsh散列