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 }
View Code

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4814

posted on 2015-02-09 01:20  xiao_xin  阅读(324)  评论(0编辑  收藏  举报

导航