myk92978 发表于 2023-2-3 13:52:26

不知道代码哪有问题

代码写的有点乱。我先把系数保存,再用结构体去存函数值,然后sort排序。


输入
第一行包含一个整数 n,代表点的个数。
接下来 n 个数字,代表 n 个点的横坐标 p
接下来一行有一个形如 y=ax2+bx+c 的抛物线其中(a ≠ 0,b ≠ 0)
1 <= n <= 105,-106 <= p, a <= 106,1 <= b, c <= 106

输出包含一行 n 个数,按照纵坐标由小到大输出其对应的横坐标 (数字之间由空格隔开,如果纵坐标相等则按照横坐标从小到大输出)
样例输入
3
1 2 3
y=1x^2+2x+114514
样例输出
1 2 3


#include<iostream>
#include<algorithm>
using namespace std;
long longn;
struct node
{
   long longx,y;
};
bool cmp(node a,node b)
{
    return a.x<=b.x;
}
intmain()
{
    cin>>n;
    getchar();
    node c={0};
    long longa;
    for(int i=1;i<=n;i++)
    {
      cin>>a;
      getchar();
    }
    string s;
    cin>>s;
    getchar();
    intb={0};
    int t=1;

    for(inti=1;i<s.size();i++)
    {
      if((s=='+'||s=='=') &&s>='0'&&s<='9'&&s!='+'&&s!='-')//存正数
      {

            b=b*10+(s-'0');
      }
      intflag;
      if(s=='-' &&s>='0'&&s<='9'&&s!='+'&&s!='-') //存负数
      {
            flag=1;
            b=b*10+(s-'0');
      }
      if(flag==1)
      {
            b=-b;
            flag=0;
      }
      if(s>='0'&&s<='9'&&(s=='x'||s=='\0'))
      {
            t++;
      }
    }
    t=1;

    for(inti=1;i<=n;i++)
    {
      for(intj=1;j<=3;j++)
      {
            if(j==1)
            {
                c.x+=a*a*b;
            }
            else if(j==2)
            {
                c.x+=a*b;
            }
            else{
                c.x+=b;
            }
      }
      c.y=i;
    }
    sort(c+1,c+1+n,cmp);

    for(inti=1;i<=n;i++)
    {
      if(i==1)
      {
         cout<<a.y];
      }
      else{
      cout<<" "<<a.y];
      }
    }
}

jhq999 发表于 2023-2-3 15:20:06

题我都没看明白
x=1
y=1x^2+2x+114514
y=114517吗?

myk92978 发表于 2023-2-3 18:41:40

jhq999 发表于 2023-2-3 15:20
题我都没看明白
x=1
y=1x^2+2x+114514


对啊,一元二次方程

傻眼貓咪 发表于 2023-2-3 20:54:07

本帖最后由 傻眼貓咪 于 2023-2-3 20:57 编辑

题目没有看懂,题目说 n 个点的横坐标 p(表示 y = constant),抛物线 y = ax2; + bx + c,那么如果说抛物线是 y = x2; + 2x + 2,n = 2, p = ,如下图,那么出现 4 个点,如何按照纵坐标由小到大输出?先 2 后 3,还是先 3 后 2?

jhq999 发表于 2023-2-3 23:15:48

myk92978 发表于 2023-2-3 18:41
对啊,一元二次方程

3
-6 0 3
y=11x^2+5x+114514
结果是0 -6 3
正确应该是0 3 -6

myk92978 发表于 2023-2-4 09:44:56

傻眼貓咪 发表于 2023-2-3 20:54
题目没有看懂,题目说 n 个点的横坐标 p(表示 y = constant),抛物线 y = ax2; + bx + c,那么如果说抛物 ...

这个图,如果输入了ABCD的横坐标,那么输出就是BCAD的横坐标。
BC的值比 AD小,同时B小于C(值一样,横坐标从小到大)

myk92978 发表于 2023-2-4 13:52:06

jhq999 发表于 2023-2-3 23:15
3
-6 0 3
y=11x^2+5x+114514


哦 对 有这个问题,我再改改
页: [1]
查看完整版本: 不知道代码哪有问题