#include <stdio.h> long long int fib[51]; int M,rozk[100]; void licz_fib(void) { int i; fib[0]=0; fib[1]=1; for(i=2;i<50;++i) fib[i]=fib[i-1]+fib[i-2]; return; } void rozklad(long long int r) { long long int w; int i,j; w=r; i=0; while(w>0) { j=1; while(fib[j]<=w) j++; rozk[i]=j-1; i++; w-=fib[j-1]; } M=i; printf("%d\n",rozk[0]+M-1); for(i=M-1;i>0;i--) printf("%d %d\n",M-i+1,rozk[0]+M-rozk[i]); for(i=0;i<rozk[0]-2;++i) printf("%d %d\n",M+i+1,M+i+2); printf("%d %d\n",rozk[0]+M-1,-1); printf("-1 -1\n"); return; } int main() { long long int x,y; licz_fib(); scanf("%lld",&x); rozklad(x); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #include <stdio.h> long long int fib[51]; int M,rozk[100]; void licz_fib(void) { int i; fib[0]=0; fib[1]=1; for(i=2;i<50;++i) fib[i]=fib[i-1]+fib[i-2]; return; } void rozklad(long long int r) { long long int w; int i,j; w=r; i=0; while(w>0) { j=1; while(fib[j]<=w) j++; rozk[i]=j-1; i++; w-=fib[j-1]; } M=i; printf("%d\n",rozk[0]+M-1); for(i=M-1;i>0;i--) printf("%d %d\n",M-i+1,rozk[0]+M-rozk[i]); for(i=0;i<rozk[0]-2;++i) printf("%d %d\n",M+i+1,M+i+2); printf("%d %d\n",rozk[0]+M-1,-1); printf("-1 -1\n"); return; } int main() { long long int x,y; licz_fib(); scanf("%lld",&x); rozklad(x); return 0; } |