鱼C论坛

 找回密码
 立即注册
查看: 2294|回复: 6

不知道代码哪有问题

[复制链接]
发表于 2023-2-3 13:52:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码写的有点乱。我先把系数保存,再用结构体去存函数值,然后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 long  n;
struct node
{
   long long  x,y;
};
bool cmp(node a,node b)
{
    return a.x<=b.x;
}
int  main()
{
    cin>>n;
    getchar();
    node c[n+3]={0};
    long long  a[n+5];
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        getchar();
    }
    string s;
    cin>>s;
    getchar();
    int  b[5]={0};
    int t=1;

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

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

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

    for(int  i=1;i<=n;i++)
    {
        if(i==1)
        {
           cout<<a[c[i].y];
        }
        else{
        cout<<" "<<a[c[i].y];
        }
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-3 15:20:06 | 显示全部楼层
题我都没看明白
x=1
y=1x^2+2x+114514
y=114517吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-3 18:41:40 | 显示全部楼层
jhq999 发表于 2023-2-3 15:20
题我都没看明白
x=1
y=1x^2+2x+114514

对啊,一元二次方程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 = [2, 3],如下图,那么出现 4 个点,如何按照纵坐标由小到大输出?先 2 后 3,还是先 3 后 2?
问题.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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(值一样,横坐标从小到大)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-4 13:52:06 | 显示全部楼层
jhq999 发表于 2023-2-3 23:15
3
-6 0 3
y=11x^2+5x+114514

哦 对 有这个问题,我再改改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 21:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表