题意:给你一串数字,问这串数字符合f[n] = a*f[n-1],f[n] = a*f[n-1]+b*f[n-2],f[n] = a*f[n-1]+b*f[n-2]+c*f[n-3]这几个方程中的哪个,然后要你给出第n+1项,如果符合多个方程,项数小的优先(第一个方程优先)。
解法:这题我先处理看是否满足f[n] = a*f[n-1]的形式,如果不满足,则用高斯消元借出两项和三项的情况的a,b,c,比如第二个方程,f[3] = a*f[2]+b*f[1],f[4] = a*f[3]+b*f[2],两个方程两个未知量,用高斯消元解出a,b,这里可能不是整数,我将他们加了个0.5取下整,居然对了。后来看那场比赛没一个人是用的高斯消元,所以不知道这样是否正确,有看出来端倪的欢迎评论告诉我。
代码:
#include#include #include #include #include using namespace std;#define N 4int f[14];typedef double Matrix[N][N];int x,y,z;void gauss_elimination(Matrix A,int n){ int i,j,k,r; for(i=0;i fabs(A[r][i])) r = j; if(r != i) { for(j=0;j<=n;j++) swap(A[r][j],A[i][j]); } //与第i+1~n行进行消元 for(k=i+1;k =0;i--) { for(j=i+1;j