-
数据结构与算法Mooc-第二章线性表
-
1、多项式加法
题目链接:1:多项式加法
思路:①看到需要合并同系数,排序果断选择用map容器,次数相同合并,那么Key值(First)肯定是选择次数
②输入是系数为负停止,那么第一次输入系数为负只需要continue,第二次结束输入(break)
③输入合法值时查找,如果找到对应次数,系数相加,找不到就插入该元素
代码:
#include<iostream>
#include<map>
using namespace std;
int main()
{
int Number, Pow;
int Test_Time;
cin >> Test_Time;
while (Test_Time--)
{
map<int, int> Polynomial; //first-pow,second-Number
int Break_Flag = 0;
while (cin >> Number >> Pow)
{
if (Pow < 0)
{
Break_Flag++;
if (Break_Flag== 1) //到一表示第一组多项式输入完成
continue;
break; //到2 两组都输入,结束输入
}
if (Polynomial.count(Pow)!=-1) //find it
{
Polynomial[Pow] += Number; //找到对应的次数,系数相加
if (Polynomial[Pow]==0) //系数为0
Polynomial.erase(Pow); //删除该子项
}
else
Polynomial.insert(make_pair(Pow, Number)); //没有对应次数,加入该子项
}
if (Break_Flag == 2)
{
auto it = Polynomial.rbegin();
for (it; it != Polynomial.rend(); it++) //map默认升序,所以逆序输出
{
if (it == Polynomial.rbegin())
cout << "[ " << it->second << " " << it->first << " ]";
else
cout << " [ " << it->second << " " << it->first << " ]";
}
cout << endl;
}
}
return 0;
}
收获:一个新的类型:auto,迭代器类,以后不用写长长的~<...>::iterator
待解答:我自己写的系数相加,查找,插新一直WA,求解答,错误代码放下
while (Test_Time--)
{
map<int, int, CMP> Polynomial; //first-pow,second-Number
int Break_Flag = 0;
while (cin >> Number >> Pow)
{
if (Pow < 0)
{
Break_Flag++;
if (Break_Flag == 1)
continue;
break;
}
it = Polynomial.find(Pow);
if (it != Polynomial.end()) //find it
{
it->second += Number;
if (it->second == 0)
Polynomial.erase(it->first);
}
else
P