1 条题解
-
0
题解:Eva's Problem(数列填空)
题目描述
给定数列的前四项,判断其为等差数列或等比数列(题目保证唯一),并输出前五项。等差数列公差和等比数列公比均为自然数,所有项≤。
解题思路
-
等差数列判断:
若相邻两项差值相等(),则为等差数列。第五项为 (第四项加公差,公差为 )。 -
等比数列处理:
若不满足等差数列条件,必为等比数列。公比 ,第五项为 (第四项乘公比)。
代码实现
#include <stdio.h> int main() { int t, a, b, c, d; scanf("%d", &t); while (t--) { scanf("%d %d %d %d", &a, &b, &c, &d); // 等差数列:相邻差值相等 if (b - a == c - b && c - b == d - c) { printf("%d %d %d %d %d\n", a, b, c, d, 2 * d - c); } else { // 等比数列:公比b/a,第五项d*(b/a) printf("%d %d %d %d %d\n", a, b, c, d, b * d / a); } } return 0; }
代码解释
- 输入处理:读取测试用例数 ,遍历每个数列的前四项。
- 条件判断:通过差值比较确定数列类型,分别计算第五项。
- 输出:按格式输出前五项,等差数列和等比数列的计算逻辑清晰。
复杂度
- 时间复杂度:(),线性处理每个测试用例。
- 空间复杂度:,仅存储输入变量。
总结
该算法利用数列性质,通过简单条件判断和数学运算,高效求解问题。代码简洁,逻辑明确,适用于题目给定的所有合法输入。
-
- 1
信息
- ID
- 659
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者