这道题是2009普及组的题,仍然是一个字符串+模拟。(蒻到先不刷算法)

这道题的题干给了很多的提示,也很全面,但是当我把种种情况都考虑到了后,在写代码的过程中仍然出现了很多的错误,wa了三四次。其实导致这些错误的缘由仍然是思路不够清晰,没有考虑清楚,以及代码能力差。多亏了测试数据,帮助我改错,,,

1.模拟题,将情况准确分类判断

2.考虑各个部分的共性,减去不必要的判断

3.自己造特殊数据去验证,举一反三

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#define MAXN 100005
using namespace std;
int n;
string s;
int a[MAXN];
bool judge1(int x){//次数||系数是否为0
if(x==) return true;
else return false;
}
bool judge2(int x){//是否为负
if(x<) return true;
else return false;
}
bool judge3(int x){//次数系数是否为一
if(x==||x==-) return true;
else return false;
}
int main(){
cin>>n;
for(int i=;i<=n+;i++){
cin>>a[i];
}
int k=n;
while(k>=){
if(judge1(a[n-k+])==false){//系数不为0
if(k==n){//第一个特判
if(judge2(a[n-k+])){//负的
if(judge3(a[n-k+])==true){//系数为1
cout<<"-"<<"x"<<"^"<<k;
}
else{
cout<<"-"<<abs(a[n-k+])<<"x"<<"^"<<k;
}
}
else {//正的
if(judge3(a[n-k+])){
cout<<"x"<<"^"<<k;
}
else{
cout<<a[n-k+]<<"x"<<"^"<<k;
}
}
}
else if(k==){//为最后一个数
if(judge2(a[n-k+])) cout<<"-"<<abs(a[n-k+]);
else cout<<"+"<<a[n-k+]; }
else if(k==){//次数为1时
if(judge2(a[n-k+])){//负的
if(judge3(a[n-k+])){
cout<<"-"<<"x";
}
else{
cout<<"-"<<abs(a[+n-k])<<"x";
}
}
else{//正的
if(judge3(a[n-k+])){
cout<<"+"<<"x";
}
else{
cout<<"+"<<a[n-k+]<<"x";
}
}
}
else{//为后面的数
if(judge2(a[n-k+])){//负的
if(judge3(a[n-k+])){
cout<<"-"<<"x"<<"^"<<k;
}
else{
cout<<"-"<<abs(a[+n-k])<<"x"<<"^"<<k;
}
}
else{//正的
if(judge3(a[n-k+])){
cout<<"+"<<"x"<<"^"<<k;
}
else{
cout<<"+"<<a[n-k+]<<"x"<<"^"<<k;
}
}
}
}
k--;
}
return ; }
05-11 16:25