

状态AC
放在B类仍然是比较水的,标签“math”,解题思路就是每次剩余个位数的钱不花,这样就能保证每次都会找回来>=1的钱款,用于下一次购物。可以使用迭代的方法,每次迭代需要更新已花钱总数和剩余钱款总数,最后剩余的钱小于10后跳出循环。也可以用递归的方法,每一层递归求出当前花的钱,返回这个数字与下一次递归的和。
我提交的是递归解:
#include <iostream>
#include <iostream>
#include <vector>
#include <cstring>
#include <string>
#include <map>
#include <unordered_map>
#include <math.h>
#include <algorithm>
#include <stdio.h>
#include <windows.h>
#include <deque>
#include <unordered_set>
#include <stack>
using namespace std;
class Operater {
public:
static unsigned int call(unsigned int k);
};
unsigned int Operater::call(unsigned int k) {
if (!(k / 10))
return k;
unsigned int tmp = k / 10;
return (10*tmp + call(tmp+k-10*tmp));
}
int main() {
int test_loop = 0;
cin >> test_loop;
while (test_loop) {
test_loop--;
unsigned int S = 0;
cin >> S;
cout << (Operater::call(S)) << endl;
}
return 0;
}

本文介绍了一种解决购物找零问题的递归算法,通过确保每次交易后找回至少一元的方式,优化剩余资金的使用。算法详细阐述了如何利用递归调用来计算累计花费,同时保持代码的简洁性和效率。

被折叠的 条评论
为什么被折叠?



