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;
}

 

转载于:https://www.cnblogs.com/sdutacmer/archive/2012/03/06/2382596.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值