原先主要错误:
没有考虑到有关0的相关情况
观看的大佬代码
整理思路
- 无非就是在相同的指数的情况下,系数相加
- 因为最后是要从大到小输出来。
注意
要对最后的结果进行四舍五入;
PTA的英语题对英语不好的我真心不友好。
#include<map>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
map<int, double> sl;
int _index[21];
bool k[1001];
bool cmp(int a, int b) {return a > b;
}
int main() {memset(k, 0, sizeof(k));int num = 0;for (int i = 0; i < 2; i++) { int n; cin >> n; for (int j = 0; j < n; j++) { int a; double b; cin >> a >> b; if (k[a] != 0) { sl[a] += b;//sl表示指数情况//其中k表示指数有没有 } else { _index[num] = a; num++; sl[a] = b; k[a] = 1; } } } sort(_index, _index + num, cmp); int nuum = num; for (int i = 0; i < num; i++) //这里用看看四舍五入情况; if (fabs(sl[_index[i]] - 0) < 0.05) nuum--; cout << nuum; for (int i = 0; i < num; i++) { if (fabs(sl[_index[i]] - 0) >= 0.05) printf(" %d %.1f", _index[i], sl[_index[i]]); } return 0;
}