40分求助

P1067 [NOIP2009 普及组] 多项式输出

ling_xi_ @ 2023-11-12 14:15:12

本地过了

#include <bits/stdc++.h>
using namespace std;
int n;
int a[100002];
int main()
{
    cin>>n;
    for(int i=1;i<=n+1;i++)
    {
        cin>>a[i];
    }
    for(int i=1;i<=n;i++)
    {
        if(i==1)
        {
            cout<<a[i]<<'x'<<'^'<<n-i+1;
        }
        if(a[i]>0 && a[i]!=1 && a[i]!=0 && i!=1)
        {
            cout<<'+'<<a[i]<<'x'<<'^'<<n-i+1;
        }
        else if(a[i]<0 && a[i]!=-1 && a[i]!=0 && i!=1)
        {
            cout<<a[i]<<'x'<<'^'<<n-i+1;
        }
        else if(a[i]>0 && a[i]==1 && i!=1)
        {
            cout<<'+'<<'x'<<'^'<<n-i+1;
        }
        else if(a[i]<0 && a[i]==-1 && a[i]!=0 && i!=1)
        {
            cout<<'-'<<'x'<<'^'<<n-i+1;
        }
    }
    if(a[n+1]>0)
    {
        cout<<'+';
    }
    if(a[n+1]!=0) 
    {
        cout<<a[n+1];
    }
    return 0;
}

by Operation0701 @ 2023-11-12 15:47:02

n = int(input())
def x(n):
    s = ''
    l = input().split()
    for i in range(n+1):
        if l[i][0] != '0':
            if l[i][0] != '-':
                if i == n:
                    s = s + f'+{l[i]}'
                    return s
                if i == n-1:
                    if int(l[i]) == 1:
                        s = s + f'+x'
                    else:
                        s = s + f'+{l[i]}x'
                    continue
                if int(l[i]) == 1:
                    s = s + f'+x^{n-i}'
                    continue
                s = s + f'+{l[i]}x^{n-i}'
            else:
                if i == n:
                    s = s + l[i]
                    return s
                if i == n-1:
                    if int(l[i]) == -1:
                        s = s + f'-x'
                    else:
                        s = s + f'{l[i]}x'
                    continue
                if int(l[i]) == -1:
                    s = s + f'-x^{n-i}'
                    continue
                s = s + f'{l[i]}x^{n-i}'
        if i == n:
            return s
print(x(n).strip('+'))

可以参考一下我愚蠢的枚举 你把一二三四测试点调试过了就能AC了 以下是1234测试点 //第一组(测试点1) 0 1 //第二组 2 0 100 2 //注意第一个数是0,第二个数不要加加号 //第三组 3 19 2 1 1 //注意末位的一不要省略 // 第四组 3 1 -100 0 0 // 注意末尾 0 不要输出


by ling_xi_ @ 2023-11-19 08:40:59

你这语言看着好奇怪


by kevin4 @ 2023-11-28 22:17:21

@lingxi python,不用担心


by TLE_ZBR @ 2024-01-31 14:45:54

其实这道题暴力枚举,只需要考虑多种情况就可以,涉及到的数学知识:整式的加减乘除

#include <iostream>
#include <cstdio>
using namespace std;
int n;
int a[105];
int main()
{
    cin>>n;
    for(int i=1;i<=n+1;i++)
    {
        cin>>a[i];
    }
    for(int i=1;i<=n+1;i++)
    {
        if(a[i]==0)
        {
            continue;
        }
        if(a[i]<0)
        {
            putchar('-');
            a[i]=a[i]*(-1);
        }
        else
        {
            if(i!=1)
            {
                putchar('+'); 
            }
        }
        if(i!=n+1&&(n-i+1)!=1)
        {
            if(a[i]==1)
            {
                cout<<"x^"<<n-i+1;
            }
            else
            {
                cout<<a[i]<<"x^"<<n-i+1;
            }
        }
        else if(i==n)
        {
            if(a[i]==1)
            {
                cout<<"x";
            }
            else
            {
                cout<<a[i]<<"x";
            }
        }
        else
        {
            cout<<a[i]<<endl;
        }
    }
    return 0;
}

by ling_xi_ @ 2024-08-14 21:15:14

thanks

|