HDU2370——Convert Kilometers to Miles

题意:将一个给定的数X以斐波那契数列为权写成0,1字串的形式,然后右移以为,再转换为10进制形式。

例如,42写成斐波纳契数列为(1,0,- 0、1,0,- 0,0,- 0),我们将其右移一位获得(1,0,- 0、1,0,- 0,0)。

计算0*1 + 0*2 + 0*3 + 1*5 + 0*8 + 0*13 + 1*21 = 26。

 

 

很简单的题目,直接先把斐波那契数列用数组存起来,然后循环对X自减即可。

我的代码(time : 15MS, MEM:212KB, CODE:463B),效率有点低,

第一名(time : 0MS, MEM:180KB, CODE:498B),不知道怎么写的==

以后再改进吧现在只能达到这程度了

View Code
#include <stdio.h>
#define N 21

short f[N] = {1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610,
987, 1597, 2584, 4181, 6765, 10946, 17711};
int main()
{
short t = 0;
short x = 0;
short j = 0;
short ans = 0;

scanf ("%d", &t);
while ( t-- )
{
scanf ("%d", &x);
ans = 0;
for ( j = N - 1; x > 1; --j)
{
if (f[j] <= x)
{
x -= f[j];
ans += f[j - 1];
}
}

printf ("%d\n", ans);
}
return 0;
}

 

posted @ 2012-03-06 20:54  1050768624  阅读(255)  评论(0编辑  收藏  举报