hdu4814 黄金进制转换
将n转化为黄金进制,注意到题目中所给fai进制公式:
f[n-1]+f[n-2]=f[n],2*f[n]=f[n+1]+f[n+2]
然后设a[50]为n,这样一遍一遍利用这两个公式变换,一直到无法变换。
1 #include<stdio.h> 2 #include<string.h> 3 int a[105]; 4 int main() 5 { 6 int n,from,to,go,i,tmp; 7 while (~scanf("%d",&n)) 8 { 9 memset(a,0,sizeof(a)); 10 a[50]=n; 11 while (1) 12 { 13 go=0; 14 for (i=1;i<=100-2;i++) 15 if (a[i]&&a[i+1]) 16 { 17 tmp=a[i]<a[i+1]?a[i]:a[i+1]; 18 a[i]-=tmp; a[i+1]-=tmp; 19 a[i+2]+=tmp; go=1; 20 } 21 for (i=3;i<=100-1;i++) 22 if (a[i]>=2) 23 { 24 a[i-2]+=a[i]/2; a[i+1]+=a[i]/2; 25 a[i]-=a[i]/2*2; go=1; 26 } 27 if (!go) break; 28 } 29 from=to=-1; 30 for (i=100;i>=1;i--) 31 if (a[i]==1){ 32 to=i; 33 if (from==-1) from=i; 34 } 35 for (i=from;i>=to;i--) 36 { 37 if (i==49) printf("."); 38 printf("%d",a[i]); 39 } 40 printf("\n"); 41 } 42 }