题意:
S0=A,S1=B,Sn=|Sn-1-Sn-2| 输入A,B求S序列中有几个不同的数 思路: 随便先写一组A,B会发现最后会出现0 其实分析一下会发现,首先默认B>A那么 S1=B=KA+r,S2=B-A=(K-1)A+r S3=|S2-S1|=|B-A-B|=A S4=|S3-S2|=(K-2)A+r 也就是说对于这样的操作当K=0时结束,而出现了K个不同的数,也就是最后留下r 然后是r减去A 整过过程就类似于一个辗转相除法 每次增加的值是商,最后的答案还要加上0 #include <iostream> #include <cstdio> #include <cstring> #include <stdio.h> #include <stdlib.h> #include <algorithm> #include <math.h> using namespace std; int main() { int t,cas=1; scanf("%d",&t); while(t--) { long long a,b,maxn,minn; long long cou=0; scanf("%lld%lld",&a,&b); maxn=max(a,b); minn=min(a,b); printf("Case #%d: ",cas++); if(a==0&&b==0) printf("1\n"); else if(a==0||b==0) printf("2\n"); else { while(1) { cou+=maxn/minn; long long r=maxn-maxn/minn*minn; long long p=minn; minn=r; maxn=p; if(r==0) break; } printf("%lld\n",cou+1); } } return 0; }