题目描述 给定整数a,b,c,d,定义f(x)=ax^3+bx^2+cx+d。求f(x)=0的不同整数解的个数。 输入描述 输入数据第一行为T,表示有T组测试数据。 接下来每组数据包括a,b,c,d。 数据保证T<=1e3,-1e5<=a,b,c,d<=1e5。 输出描述 输出方程不同实数解的个数。如果方程超过三个不同的实数解,请输出“strange!”(不包括引号)。每组数据输出一行。 样例输入 1 1 1 1 1 样例输出 1c++实现
时间: 2024-02-13 22:05:29 浏览: 165
[详细完整版]程序设计C.doc
以下是 C++ 实现的代码:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int T;
cin >> T;
while (T--)
{
int a, b, c, d;
cin >> a >> b >> c >> d;
if (a == 0)
{
if (b == 0)
{
if (c == 0)
cout << (d == 0 ? -1 : 0) << endl;
else
cout << 1 << endl;
}
else
{
int x = -d / b;
cout << (b * x + d == 0 ? 1 : 0) << endl;
}
continue;
}
int delta = b * b - 3 * a * c;
if (delta > 0)
cout << 3 << endl;
else if (delta < 0)
cout << 1 << endl;
else
{
int x1 = (-b + sqrt(delta)) / (3 * a);
int x2 = (-b - sqrt(delta)) / (3 * a);
if ((x1 == x2 || b + 3 * a * x1 != 0) && (x1 == x2 || b + 3 * a * x2 != 0))
cout << 1 << endl;
else
cout << 3 << endl;
}
}
return 0;
}
```
这里需要注意几个细节:
1. 当 $a=0$ 时,方程退化成二次或一次方程。需要单独处理。
2. 当 $\Delta=0$ 时,需要判断 $f'(x)$ 的零点是否也是 $f(x)$ 的零点。如果是,则方程有三个实数解。
阅读全文