题目要求推断数列的下一项,数列有可能是等差数列也有可能是等比数列。
总时间限制: 1000ms 内存限制: 65536kB
Eva的家庭作业里有很多数列填空练习。填空练习的要求是:已知数列的前四项,填出第五项。因为已经知道这些数列只可能是等差或等比数列,她决定写一个程序来完成这些练习。
第一行是数列的数目t(0 <= t <= 20)。以下每行均包含四个整数,表示数列的前四项。约定数列的前五项均为不大于10^5的自然数,等比数列的比值也是自然数。
对输入的每个数列,输出它的前五项。
2
1 2 3 4
1 2 4 8
1 2 3 4 5
1 2 4 8 16
需要根据数列前4项的值来判断是等差数列还是等比数列,由于只有这两种数列,因此我们求出前四项两两之间的差即可,也可以转化成首尾两项的和等于中间两项的和。如果不满足这个条件则为等比数列。
#include <iostream>
using namespace std;
int main() {
int t, i, j, a[4];
cin >> t;
for (i = 0; i < t; ++i) {
for (j = 0; j < 4; ++j) {
cin >> a[j];
cout << a[j] << " ";
}
if (a[0] + a[3] == a[1] + a[2]) {
cout << a[3] + a[2] - a[1] << endl;
}
else {
cout << a[3] * a[2] / a[1] << endl;
}
}
return 0;
}
2780.cpp 代码长度:331B 内存:128kB 时间:2ms 通过率:95% 最小内存:128kB 最短时间:0ms
判断出等差数列后,就可以求出下一项,否则按照等比数列处理即可,注意也要输出前四项。
有任何的改进意见欢迎大家在微信平台公众号主页面留言或者发表issue。