【HPU 1048 QAQ的纸币问题(二)】+ 思维

25 篇文章 1 订阅

1048: QAQ的纸币问题(二)
时间限制: 1 Sec 内存限制: 128 MB
提交: 17 解决: 6
[提交][状态][讨论版]
题目描述
这天无聊的QAQ又在研究纸币的组合问题,QAQ发现只需要1、2、7
三种面值就可以通过加法和减法组成1−10的所有数字。如:
1=1
2=2
3=1+2
4=7−1−2
5=7−2
6=7−1
7=7
8=1+7
9=2+7
10=1+2+7
QAQ想知道最少需要多少种不同的面值就可以构成从1−N的所有数字,由于N
很大,就请了你这个BestCoder来帮他。
PS:构成每一个数字,同种面值最多使用一张。
输入
第一行输入一个整数T
,代表有T组测试数据。

每组数据输入一个整数N

,代表上面提到的信息。

注:1<=T<=666666,1<=N<=666666

输出
输出一个整数代表最后的结果。
样例输入

3
1
10
666666

样例输出

1
3
13

每次取当前可以取到的最大钱数的 2 倍 + 1 即为最优解~~

AC代码:

#include<cstdio>
int main()
{
    int T,n;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        int ans = 0,nl = 0;
        while(ans < n){
            ans += ans * 2 + 1;
            nl++;
        }
        printf("%d\n",nl);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值