3503 - 喵呜A
话说在遥远的喵星上,住着一群喵呜,有一天,老喵呜听说了地球上有一个叫ACM比赛,于是就打算派选手参加,但从喵星到地球路费特别贵,于是,老喵呜只能选拔几只高智商的小喵呜前往参加,但是该怎么选择高智商的小喵呜呢?他又听说ACM有一些找规律的题目,因此也希望搞一堆数列让众喵呜们找规律,谁找得多谁就去参赛。
当然,有一些规律一眼就能看出来,例如{1, 2, 3, 4, 5},下一个数显然是6,因为后一个数等于前一个数加一。再例如{1, 2, 4, 8, 16},下一个数为32,因为后一个数等于前一个数乘以2。当然,也有一些规律不太容易看出来,例如{1, 3, 7, 15},下一个数为31,因为后一个数等于前一个数乘以2再加上1。
现在到了出题的时候了,老喵呜随手写了几个数字,想让小喵呜们告诉他下一个数是多少,当然,考虑到小喵呜们平常除了卖萌其他啥也不会,于是他告诉小喵呜们,每个规律都是前一个数乘上a再加上b,当然a和b都是整数。
出完题目后,老喵呜感觉有点累了,他希望你帮他验一下题,对于他出的每个序列,请你告诉他接下来的那个数是多少
Input
第一行为一个数T,表示测试数据个数。
对于每组测试数据,第一行包含一个整数n(0<n<=10),表示老喵呜给你的序列包含n个数,第二行包含n个数a1~an,表示老喵呜给你的序列。(|ai|<=1000)
Output
输出T行,每行代表一组测试数据的输出。对于每组测试数据,如果这个序列根本找不到规律,请输出Bad String,如果这个序列的下一个数有多种可能,请输出Too Many,如果这个序列的下一个数唯一,请输出这个数。
Examples
Input
5 5 1 2 3 4 5 5 2 4 8 16 32 4 1 3 7 15 4 16 8 4 2 2 1 3
Output
6 64 31 Bad String Too Many
Solution C++
#include <stdio.h> #include <algorithm> using namespace std; int a[1005]; int sub[1005]; int main() { //freopen("a.in","r",stdin); //freopen("a.out","w",stdout); int i,j,n,T; scanf("%d",&T); while(T--) { scanf("%d",&n); for (i=0;i<n;i++) { scanf("%d",&a[i]); } if (n==1) {printf("Too Many\n");continue;} if (n==2 && a[0]==a[1]) {printf("%d\n",a[0]);continue;} if (n==2) {printf("Too Many\n");continue;} for (i=0;i<n-1;i++) { sub[i]=a[i+1]-a[i]; } for (i=0;i<n-1;i++) { if (sub[i]!=0) break; } if (i==n-1) {printf("%d\n",a[0]);continue;} if (sub[0]==0) {printf("Bad String\n");continue;} int prev; for (i=0;i<n-2;i++) { if (sub[i]!=0 && sub[i+1]%sub[i]!=0) break; if (i==0) prev=sub[i+1]/sub[i]; else if (sub[i+1]!=sub[i]*prev) break; } if (i<n-2) printf("Bad String\n"); else { int A=prev; int B=a[1]-a[0]*A; printf("%d\n",a[n-1]*A+B); } } return 0; }