不知道代码哪有问题
代码写的有点乱。我先把系数保存,再用结构体去存函数值,然后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];
}
}
}
题我都没看明白
x=1
y=1x^2+2x+114514
y=114517吗?
jhq999 发表于 2023-2-3 15:20
题我都没看明白
x=1
y=1x^2+2x+114514
对啊,一元二次方程 本帖最后由 傻眼貓咪 于 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?
myk92978 发表于 2023-2-3 18:41
对啊,一元二次方程
3
-6 0 3
y=11x^2+5x+114514
结果是0 -6 3
正确应该是0 3 -6
傻眼貓咪 发表于 2023-2-3 20:54
题目没有看懂,题目说 n 个点的横坐标 p(表示 y = constant),抛物线 y = ax2; + bx + c,那么如果说抛物 ...
这个图,如果输入了ABCD的横坐标,那么输出就是BCAD的横坐标。
BC的值比 AD小,同时B小于C(值一样,横坐标从小到大) jhq999 发表于 2023-2-3 23:15
3
-6 0 3
y=11x^2+5x+114514
哦 对 有这个问题,我再改改
页:
[1]