题解>>>遍历并处理
2026-02-06 16:40:24
发布于:天津
22阅读
0回复
0点赞
A4.多项式输出
题目分析
本题要求按照特定格式输出多项式。给定多项式次数 n 和各项系数,需要处理以下关键点:
- 系数符号处理:首项系数为正时不显示
+,为负时显示-;其他项需要显示符号 - 系数绝对值处理:系数绝对值为1且次数>0时不显示数字1
- 指数显示处理:
- 次数>1时显示为
x^次数 - 次数=1时显示为
x - 次数=0时只显示系数
- 次数>1时显示为
- 特殊情况处理:系数为0的项不输出
- 格式要求:开头和结尾不能有多余空格
核心思路
- 从最高次项
n开始遍历到常数项0 - 对每一项系数
a进行判断:- 如果系数为0,跳过该项
- 处理符号:根据是否是第一项和非零项决定是否显示符号
- 处理系数绝对值:排除绝对值为1且次数>0的情况
- 处理变量部分:根据次数决定显示
x^次数、x或不显示
- 注意常数项(次数为0)的特殊处理
代码实现(all AC,可放心食用)
#include <cstdio>
#include <cmath>
using namespace std;
int main() {
int n;
cin >> n;
// 标记是否是第一项(第一个非零项)
bool first = true;
for (int i = n; i >= 0; i--) {
int a; // 系数
scanf("%d",&a);
// 系数为0,跳过该项
if (a == 0) continue;
// 处理符号
if (first) {
// 第一项:系数为正时不显示+,为负时显示-
if (a < 0) printf("-");
} else {
// 非第一项:系数为正显示+,为负显示-
if (a > 0) printf("+");
else printf("-");
}
// 处理系数绝对值部分
int abs_a = abs(a);
// 如果系数绝对值不为1,或者次数为0,需要输出系数绝对值
if (abs_a != 1 || i == 0) {
printf("%d",abs_a);
}
// 处理变量和指数部分
if (i > 1) {
printf("x^%d",i);
} else if (i == 1) {
printf("x");
}
// i==0的情况只输出系数,上面已经处理
// 已经输出了第一项,将first设为false
first = false;
}
// 极端情况:所有系数都为0(根据题目说明,最高次项系数不为0,所以至少有一项)
if (first) {
printf("0");
}
printf("\n");
return 0;//不忘好习惯
}
代码详解
1. 输入处理
- 读取多项式次数
n - 从最高次项
n到常数项0依次读取系数
2. 符号处理逻辑
if (first) {
// 第一项:系数为正时不显示+,为负时显示-
if (a < 0) printf("-");
}else {
// 非第一项:系数为正显示+,为负显示-
if (a > 0) printf("+");
else printf("-");
}
- 使用
first标志位标记是否是第一个输出的项 - 第一项:负号需要显示,正号不显示
- 后续项:正负号都需要显示
3. 系数值处理
// 取系数的绝对值
int abs_a = abs(a);
// 需要输出系数数值的情况:
// 1. 系数绝对值不等于1
// 2. 系数绝对值等于1但次数为0(常数项)
if (abs_a != 1 || i == 0) {
printf("%d",abs_a);
}
- 当次数>0且系数绝对值为1时,不显示数字1
- 常数项(i=0)即使系数为±1也要显示
4. 变量部分处理
if (i > 1) {
printf("x^%d",i); // 如:x^5, x^3
} else if (i == 1) {
printf("x"); // 一次项只显示x
}
// i==0:常数项,不显示x
5. 特殊情况
虽然题目保证最高次项系数不为0,但为健壮性考虑:
if (first) {
printf("0"); // 所有系数都为0的情况
}
示例分析
示例1
输入:
5
100 -1 1 -3 0 10
处理过程:
- i=5, a=100: 第一项,正数不显示+,显示
100x^5 - i=4, a=-1: 显示
-,绝对值1不显示数字,显示x^4→-x^4 - i=3, a=1: 显示
+,绝对值1不显示数字,显示x^3→+x^3 - i=2, a=-3: 显示
-,绝对值3显示数字,显示x^2→-3x^2 - i=1, a=0: 跳过
- i=0, a=10: 显示
+,显示数字10 →+10
结果:100x^5-x^4+x^3-3x^2+10
示例2
输入:
3
-50 0 0 1
处理过程:
- i=3, a=-50: 第一项,负数显示
-,显示50x^3→-50x^3 - i=2, a=0: 跳过
- i=1, a=0: 跳过
- i=0, a=1: 显示
+,常数项要显示数字 →+1
结果:-50x^3+1
复杂度分析
- 时间复杂度:O(n),只需要遍历n+1个系数一次
- 空间复杂度:O(1),只使用了常数个变量
常见错误点
- 忘记处理系数为0的情况:题目要求只输出系数不为0的项
- 系数绝对值为1时的处理不当:当次数>0且系数绝对值为1时,不显示数字1
- 符号处理错误:第一项系数为正时不应该显示
+ - 指数显示格式错误:
- 一次项应该显示为
x而不是x^1 - 常数项不应该显示
x
- 一次项应该显示为
- 边界情况:n=0时(只有常数项)需要正确处理
总结
这道题主要考察字符串格式化和条件判断能力。通过分情况讨论系数的符号、绝对值和次数,按照规则拼接字符串即可。注意仔细处理每个边界情况,特别是系数为±1和次数为0或1的情况。
蒜鸟蒜鸟,睡了
全部评论 5
OK
昨天 来自 浙江
06
2天前 来自 安徽
0很全,厉害
2026-02-06 来自 广东
0谢谢
2026-02-07 来自 天津
0
AI?
2026-02-06 来自 湖北
0我不会格式
但文字都是我喂给它的2026-02-06 来自 天津
0只能说20%AI成分
2026-02-06 来自 天津
0
蒟蒻....
2026-02-06 来自 天津
0
























有帮助,赞一个