B. Food Buying Round #617(递归 + 模拟)

B. Food Buying

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Mishka wants to buy some food in the nearby shop. Initially, he has
𝑠s burles on his card.

Mishka can perform the following operation any number of times
(possibly, zero): choose some positive integer number 1≤𝑥≤𝑠1≤x≤s,
buy food that costs exactly 𝑥x burles and obtain ⌊𝑥10⌋⌊x10⌋ burles
as a cashback (in other words, Mishka spends 𝑥x burles and obtains
⌊𝑥10⌋⌊x10⌋ back). The operation ⌊𝑎𝑏⌋⌊ab⌋ means 𝑎a divided by 𝑏b
rounded down.

It is guaranteed that you can always buy some food that costs 𝑥x for
any possible value of 𝑥x.

Your task is to say the maximum number of burles Mishka can spend if
he buys food optimally.

For example, if Mishka has 𝑠=19s=19 burles then the maximum number of
burles he can spend is 2121. Firstly, he can spend 𝑥=10x=10 burles,
obtain 11 burle as a cashback. Now he has 𝑠=10s=10 burles, so can
spend 𝑥=10x=10 burles, obtain 11 burle as a cashback and spend it
too.

You have to answer 𝑡t independent test cases.

Input

The first line of the input contains one integer 𝑡t (1≤𝑡≤1041≤t≤104)
— the number of test cases.

The next 𝑡t lines describe test cases. Each test case is given on a
separate line and consists of one integer 𝑠s (1≤𝑠≤1091≤s≤109) — the
number of burles Mishka initially has.

Output

For each test case print the answer on it — the maximum number of
burles Mishka can spend if he buys food optimally.

Example

input

Copy

6
1
10
19
9876
12345
1000000000
output

Copy

1
11
21
10973
13716
1111111111

思路

模拟下一下买东西的过程:假如 我们有 1234 rmb,设我们花的最多钱数为 sum,一开始的时候 sum = 1234 ,由于四舍五入的原因,我们把所买东西的价格定位:x = 10 rmb,,第一个我们买 123 个东西,这个时候找回了 123 rmb,此时sum = 1234 + 123 = 1357 ,手里剩余的钱为 123 + 4 = 127 ,,, 然后我们 12 东西 找回了 12 rmb 此时剩余的钱为 12 + 7 = 19,sum = 1357 + 12 = 1369 ,,,然后我们继续买 1个物品 找回 1rmb ,手里剩余的钱为 1 + 2 = 3 < 10 此时无法继续买东西,此时最多可以花的💰为: sum = 1369 + 3 = 1372

题解如下

#include<iostream>
#include<string>
#include<algorithm>
#include<cmath>
#include<string.h>
#include<vector>
#include<map>
using namespace std;
 
const int Len = 2005;
int ar[Len];
 
void dfs(int mon ,int sum)
{
    if(mon / 10 == 0)
    {
        printf("%d\n",sum);
        return;
    }
    dfs(mon/10 + mon%10 , sum + mon/10);
}
 
int main()
{
    //freopen("T.txt","r",stdin);
    int t;
    scanf("%d",&t);
    while(t --)
    {
        int n;
        scanf("%d",&n);
        dfs(n , n);
    }
 
 
 
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值