模拟——多项式输出

模拟 · 例2-多项式输出

https://ac.nowcoder.com/acm/contest/20960/1002

虽然说模拟就是按照计算机的题目意思一步一步写,但是真实情况我会一直一边想一边写写到后面就会很乱,所有应该的思考路径是:

  1. 先整理题目里面的各种规则
  2. 把题目里面的各种规则拆分成小任务单独书写,而且每个规则下可能有特殊情况,在每个小任务下单独书写

把每一段功能分开写——多项式输出链接https://ac.nowcoder.com/acm/contest/20960/1002 我最开始的思路就是想到哪写到哪,从每一项往后面枚举,就会导致逻辑不清晰,书写混乱

```#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n' 


signed main() {
    int n;
    cin>>n;
    int m = n+1;
    int cnt = n;
    while(m--){
    	int num;
    	cin>>num;
    	if(num == 0){
    		cnt--;	
    	}
    	else if(num > 0){
    		if(num == 1 && cnt != n){
    			cout<<"+"<<"x"<<"^"<<cnt;	
    			cnt--; 
    		} 
    		if(cnt == 0) cout<<"+"<<num;
    		if(cnt == n){
    			if(num != 1){
    				cout<<num<<"x"<<"^"<<cnt;
    			}
    			else{
					cout<<"x"<<"^"<<cnt; 
    				cnt--;
    			}
    		}else{
				cout<<"+"<<num<<"x"<<"^"<<cnt;
				cnt--;
			}
    	}else if(num < 0){
    		if(cnt == 0) cout<<"-"<<num;
    		if(num == -1){
				cout<<"-"<<"x"<<"^"<<cnt;
				cnt--;
			}
    		else{
    			cout<<num<<"x"<<"^"<<cnt;
    			cnt--;
    		}
    	}
    }
    return 0;
}

但是正确不容易错的思路应该是把多项式的每一项拆成符号,数字,x和对应次方

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n' 

const int N = 110;
int a[N]; 

signed main() {
    int n;
    cin>>n;
    for(int i = n;i>=0;i--){
    	cin>>a[i];
    	if(a[i] == 0) continue;
    	if(i == n){
    		if(a[i] < 0) cout<<"-";
			else ; 
    	}else{
    		if(a[i] > 0) cout<<"+";
    		else if(a[i] < 0) cout<<"-";
    	}//1.先考虑的符号部分
    	
    	if((a[i] == 1 || a[i] == -1) && i != 0) ;
    	else cout<<fabs(a[i]);//2.再考虑数字部分
    	
    	if(i == 0);
    	if(i == 1) cout<<"x"; 
    	else cout<<"x^"<<i;//3.最后是x和次方
    }
    return 0;
}
每一个部分里面都有一些特殊情况单独讨论
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务