题目链接:该题是luogu试炼场的2-1:T2
试炼场2-1题解包:
2-1 | 简单模拟 | |
题号 | 题目 | 备注 |
1003 | 铺地毯 | 逆向查找 |
1067 | 多项式输出 | 分段模拟 |
1540 | 机器翻译 | 循环队列 |
1056 | 排座椅 | 统计排序 |
1328 | 生活大爆炸版石头剪刀布 | 暴力模拟 |
1563 | 玩具谜题 | 环形思维 |
题目大意:
给出多显示的最高项n,给出各项的系数,要求按照数学规范输出该多项式;
解题思路:
分段讨论:需要考虑系数的符号;
上代码:
//luogu试炼场2-1:2:1067:多项式输出
//2009普及组T1:纯手工模拟,分段处理:考虑系数的符号问题
#include<cstdio>
#include<cstring>
int n,a[110];
int main()
{
scanf("%d",&n);//有n项
scanf("%d",&a[1]);//第一项单独处理:最少会有一项
if(a[1]!=0)
{
if(a[1]==1) printf("x^%d",n);
else if(a[1]==-1) printf("-x^%d",n);
else printf("%dx^%d",a[1],n);
}
for(int i=2;i<=n-1;i++)//中间的(n-2)项
{
scanf("%d",&a[i]);
if(a[i]!=0)
{
if(a[i]>0) printf("+");
if(a[i]==1) printf("x^%d",n-i+1);
else if(a[i]==-1) printf("-x^%d",n-i+1);
else printf("%dx^%d",a[i],n-i+1);
}
}
scanf("%d%d",&a[n],&a[n+1]);//最后两项
if(a[n]>0)
{
printf("+");
if(a[n]==1) printf("x");
else printf("%dx",a[n]);
}
if(a[n]<0)
{
if(a[n]==-1) printf("-x");
else printf("%dx",a[n]);
}
if(a[n+1]!=0)
{
if(a[n+1]>0) printf("+");
printf("%d",a[n+1]);
}
return 0;
}