解题思路:

我也醉了 这题的答案。。例如n=4的时候输入0 1 0 0 0  输出的是 +x^4,居然过了,还有就是全输入0的时候是没有输出的。不要纠结为啥不是+x^3,请问 1 前面所有的不符合的0 算多项式么?

第一个题解是不判断前面的0的,也就是会出现0 1 0 0 0,+x这样;

第二个题解是判断前面的0的,也就是输入0 1 0 0 0,输出为 x^4;

思路:

    我是按照自己的思路写的

    三个重要的判断(前,中,后)

    首先,最前面的那一位,如果是 1 ,就输出 1;如果是 -1,就输出 -1;不是 -1 ,原样输出;

    中间,如果是 ±1 ,只需输出符号;不是 ±1,原样输出;

    末尾,只需判断正负加符号即可!

注意事项:

参考代码:

第一个题解:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int d[1005],a[1005];
int main()
{
	int n, d=0, i, j=0, k;
	cin >> n;
	for(i=0;i<n+1;i++)
		cin>>a[i];
	k = n ;				
	for(i = 0; i < n+1; i++)
	{				
			if(a[i]==0) { k--;d++;continue; }	   // 0 跳过,k-1 
		 	if(i == 0 && a[i] == -1 ) //特殊 -1
		 	{		 		
		 	 	if(k!=1) {	  cout << "-x^" << k--;continue;	}
		 	 	if(k==1) {	  cout << "-x" ;continue;	}
			}			
		 	if(i == 0 && a[i] == 1 ) //特殊 1 
		 	{
		 		if(k!=1) { cout << "x^" << k--;continue;	}
		 		if(k==1) { cout << "x" ;continue;	}
			}			
			if(i == 0) //首位不是 1 的数 
			{
				if(k!=1) {	cout << a[0] << "x^" << k--;continue;}	 
				if(k==1)  {	cout << a[0] << "x" ;continue;}
			}		
			//中间的数	
			if(i > 0 && i < n && a[i] == 1) 
			{
				if(k!=1)	{	cout << "+x^" << k--;continue;	 }
				if(k==1)   	{	cout << "+x" ;continue;	 }
			}			 
			if(i > 0 && i < n && a[i] == -1) 
			{
				if(k!=1) {	cout << "-x^" << k--;continue;	}
				if(k==1) {	cout << "-x" ;continue;	}
			}
			if(i > 0 && i < n )
			{
				if(a[i] < -1)
				{
					if(k!=1) {	cout << a[i] << "x^" << k--;continue;	}
					if(k==1) {	cout << a[i] << "x" ;continue;	}
				}
				if(a[i] > 1)
				{
					if(k!=1) {	cout << "+" << a[i] << "x^" << k--;continue;	}
					if(k==1) {	cout << "+" << a[i] << "x" ;continue;	}
				}
			}	
			//最后的数字		
			if(i == n && a[i] < 0) {	cout << a[i] << endl; continue;	}
			if(i == n && a[i] > 0) {	cout << "+" << a[i] << endl; continue;	}
	}			
	return 0;
}

第二个题解:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int d[1005],a[1005];
int main()
{
	int n, d=0, i, j=0, k;
	cin >> n;
	for(i=0;i<n+1;i++)
		cin>>a[i];
	k = n ;		
	for(j=0;j<n+1;j++)	
		if(a[j]) break;	
	for(i = j; i < n+1; i++)
	{				
			if(a[i]==0) { k--;continue; }	   // 0 跳过,k-1 
		 	if(i == j && a[i] == -1 ) //特殊 -1
		 	{
		 	 	if(k!=1) {	  cout << "-x^" << k--;continue;	}
		 	 	if(k==1) {	  cout << "-x" ;continue;	}
			}			
		 	if(i == j && a[i] == 1 ) //特殊 1 
		 	{
		 		if(k!=1) { cout << "x^" << k--;continue;	}
		 		if(k==1) { cout << "x" ;continue;	}
			}			
			if(i == j) //首位不是 1 的数 
			{
				if(k!=1) {	cout << a[i] << "x^" << k--;continue;}	 
				if(k==1)  {	cout << a[i] << "x" ;continue;}
			}		
			//中间的数	
			if(i > j && i < n && a[i] == 1) 
			{
				if(k!=1)	{	cout << "+x^" << k--;continue;	 }
				if(k==1)   	{	cout << "+x" ;continue;	 }
			}			 
			if(i > j && i < n && a[i] == -1) 
			{
				if(k!=1) {	cout << "-x^" << k--;continue;	}
				if(k==1) {	cout << "-x" ;continue;	}
			}
			if(i > j && i < n )
			{
				if(a[i] < -1)
				{
					if(k!=1) {	cout << a[i] << "x^" << k--;continue;	}
					if(k==1) {	cout << a[i] << "x" ;continue;	}
				}
				if(a[i] > 1)
				{
					if(k!=1) {	cout << "+" << a[i] << "x^" << k--;continue;	}
					if(k==1) {	cout << "+" << a[i] << "x" ;continue;	}
				}
			}	
			//最后的数字		
			if(i == n && a[i] < 0) {	cout << a[i] << endl; continue;	}
			if(i == n && a[i] > 0) {	cout << "+" << a[i] << endl; continue;	}
	}			
	return 0;
}


点赞(4)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论