FYH666666 @ 2024-02-28 18:21:20
#include<cstdio>
int zf(int a){
if(a>0) return 1;
else if(a==0) return 0;
else if(a<0) return -1;
}
int cz(int a){
if(a==1) return 1;
else if(a==-1) return -1;
else return 0;
}
int sc(int a){
if(zf(a)==1){
if(cz(a)==1) return 10;//为正一
else if(cz(a)==0) return 11;//正数(除了一)
}
else if(zf(a)==-1){
if(cz(a)==-1) return 20;//为负一
else if(cz(a)==0) return 21;//负数(除负一)
}
}
int main(){
int n,a[105],flag=0;
scanf("%d",&n);
for(int i=1;i<=n+1;i++){
scanf("%d",&a[i]);
}
for(int i=1,j=n;i<=n,j>1;i++,j--){
if(flag==0&&sc(a[i])!=0){
flag=1;
if(sc(a[i])==10) printf("x^%d",j);
else if(sc(a[i])==11) printf("%dx^%d",a[i],j);
else if(sc(a[i])==20) printf("-x^%d",j);
else if(sc(a[i])==21) printf("%dx^%d",a[i],j);//首个输出特殊
}
else{
if(sc(a[i])==10) printf("+x^%d",j);
else if(sc(a[i])==11) printf("+%dx^%d",a[i],j);
else if(sc(a[i])==20) printf("-x^%d",j);
else if(sc(a[i])==21) printf("%dx^%d",a[i],j);
}
}
if(sc(a[n+1])==10) printf("+%d",a[n+1]);
else if(sc(a[n+1])==11) printf("+%d",a[n+1]);
else if(sc(a[n+1])==20) printf("-%d",a[n+1]);
else if(sc(a[n+1])==21) printf("%d",a[n+1]);
else if(sc(a[n+1])==0) printf("%d",0);
return 0;
}
by XYCF @ 2024-03-07 02:19:11
我随便出几组数据,这个代码都过不了,不妨先思考看看。
示例一:
1
-1 0
示例二:
1
2 0
实例三:
0
12
以下是基于你的狮山代码,修改而成的 AC 狮山
#include <cstdio>
int zf(int a)
{
if (a > 0)
return 1;
else if (a == 0)
return 0;
else if (a < 0)
return -1;
}
int cz(int a)
{
if (a == 1)
return 1;
else if (a == -1)
return -1;
else
return 0;
}
int sc(int a)
{
if (zf(a) == 1) // a > 0
{
if (cz(a) == 1) // a > 0 && a == 1
return 10; // 为正一
else if (cz(a) == 0) // a > 0 && a != 1 && a != -1
return 11; // 正数(除了一)
}
else if (zf(a) == -1) // a < 0
{
if (cz(a) == -1) // a < 0 && a == -1
return 20; // 为负一
else if (cz(a) == 0) // a < 0 && a != -1 && a != 1
return 21; // 负数(除负一)
}
// 缺 a == 0 需写:return 0;
return 0;
}
int main()
{
int n, a[105], flag = 0;
scanf("%d", &n);
for (int i = 1; i <= n + 1; i++)
{
scanf("%d", &a[i]);
}
if (n == 0)
{
printf("%d", a[1]);
return 0;
}
for (int i = 1, j = n; i <= n, j >= 1; i++, j--)
{
if (flag == 0 && sc(a[i]) != 0 && j > 1)
{
flag = 1;
if (sc(a[i]) == 10)
printf("x^%d", j);
else if (sc(a[i]) == 11)
printf("%dx^%d", a[i], j);
else if (sc(a[i]) == 20)
printf("-x^%d", j);
else if (sc(a[i]) == 21)
printf("%dx^%d", a[i], j); // 首个输出特殊
}
else if (j > 1)
{
if (sc(a[i]) == 10)
printf("+x^%d", j);
else if (sc(a[i]) == 11)
printf("+%dx^%d", a[i], j);
else if (sc(a[i]) == 20)
printf("-x^%d", j);
else if (sc(a[i]) == 21)
printf("%dx^%d", a[i], j);
}else if(j == 1 && flag == 0){
if (sc(a[i]) == 10)
printf("x");
else if (sc(a[i]) == 11)
printf("%dx", a[i]);
else if (sc(a[i]) == 20)
printf("-x");
else if (sc(a[i]) == 21)
printf("%dx", a[i]);
}else{
if (sc(a[i]) == 10)
printf("+x");
else if (sc(a[i]) == 11)
printf("+%dx", a[i]);
else if (sc(a[i]) == 20)
printf("-x");
else if (sc(a[i]) == 21)
printf("%dx", a[i]);
}
}
if (sc(a[n + 1]) == 10 && n > 0)
printf("+%d", a[n + 1]);
else if (sc(a[n + 1]) == 11 && n > 0)
printf("+%d", a[n + 1]);
else if (sc(a[n + 1]) == 20)
printf("%d", a[n + 1]);
else if (sc(a[n + 1]) == 21)
printf("%d", a[n + 1]);
else if (sc(a[n + 1]) == 0 && flag == 0)
printf("%d", 0);
return 0;
}
比如main函数里,在完成输入之后的循环
for (int i = 1, j = n; i <= n, j > 1; i++, j--)
它只能循环 j > 1
改为j >= 1
)。指数为1是一种特殊情况,你不应将特殊情况抛弃
不要用拼音,尤其是,你还只有首拼
zf
, cs
, sc
函数名是什么意思?正负,参数,输出?
不是函数越多显得越厉害
zf
,cs
, sc
函数完全没必要
(即使用sc函数,直接写条件,也比这个清晰多了)
根据你的代码,我改写了你的zf
、cz
、sc
函数,为:
int sc(int a){
if(a == 1) return 10;
if(a > 1) return 11;
if(a == -1) return 20;
if(a < -1) return 21;
return 0;
}
这是不是直观明了了很多?
而既然都能够这样写了,就不需要sc函数了,直接在main函数里写条件分支就可以了
太多了,我不方便直接对你的代码下手,除非大改
比如:无法正确处理常数项符号(负数都不要额外输出负号;在常数项前没有任何输出时)
不全部列出了
实在不会,看看题解吧。对自己,对别人都是好的。(这道题的第一个题解不严谨)
题解写出来,就是希望后人合理运用的
看你的代码太折磨了
#include <bits/stdc++.h>
using namespace std;
int n, a;
bool flag;
int main(){
cin >> n;
for (int i = n; i >= 0; i--){
cin >> a;
if (a){
if (i != n && a > 0 && flag == 1) cout << "+";
if (abs(a) > 1 || i == 0) cout << a;
if (a == -1 && i) cout << "-";
if (i > 1) cout << "x^" << i;
if (i == 1) cout << "x";
flag = 1;
}else if(a == 0 && n == 0) cout << a;
}
}
最后还是说一句:加油啊,少年!
by FYH666666 @ 2024-03-23 13:12:46
@XYCF 谢谢啦!
by XYCF @ 2024-03-23 18:32:08
不用谢。我语气太冲了,可能是那天熬夜太晚了,内分泌失调。