目录
一、小F的永久代币卡回本计划
问题描述
测试样例
解题思路:
问题理解:
数学公式:
代码实现:
最终代码:
运行结果:
二、构造特定数组的逆序拼接
问题描述
测试样例
解题思路:
问题理解
数据结构选择
算法步骤
最终代码:
运行结果:
一、小F的永久代币卡回本计划
问题描述
小F最近迷上了玩一款游戏,她面前有一个永久代币卡的购买机会。该卡片的价格为
a
勾玉,每天登录游戏可以返还b
勾玉。小F想知道她至少需要登录多少天,才能让购买的永久代币卡回本。
测试样例
样例1:
输入:
a = 10, b = 1
输出:10
样例2:
输入:
a = 10, b = 2
输出:5
样例3:
输入:
a = 10, b = 3
输出:4
解题思路:
-
问题理解:
- 需要计算小F至少需要登录多少天,才能让购买的永久代币卡回本。
- 每天登录游戏可以返还
b
勾玉,而卡片的价格为a
勾玉。
-
数学公式:
- 需要计算
a
除以b
的向上取整值,因为即使最后一天返还的勾玉不足以完全回本,也需要算作一天。
- 需要计算
-
代码实现:
- 使用了
ceil
函数来实现向上取整。ceil
函数会将浮点数向上取整为最接近的整数。 (double)a / b
将整数除法转换为浮点数除法,确保ceil
函数能够正确处理。
- 使用了
最终代码:
#include <cmath>
#include <iostream>
using namespace std;
int solution(int a, int b) {
return ceil((double)a/b);
}
int main() {
cout << (solution(10, 1) == 10) << endl;
cout << (solution(10, 2) == 5) << endl;
cout << (solution(10, 3) == 4) << endl;
return 0;
}
运行结果:
二、构造特定数组的逆序拼接
问题描述
小U得到了一个数字n,他的任务是构造一个特定数组。这个数组的构造规则是:对于每个i从1到n,将数字n到i逆序拼接,直到i等于n为止。最终,输出这个拼接后的数组。
例如,当n等于3时,拼接后的数组是
[3, 2, 1, 3, 2, 3]
。
测试样例
样例1:
输入:
n = 3
输出:[3, 2, 1, 3, 2, 3]
样例2:
输入:
n = 4
输出:[4, 3, 2, 1, 4, 3, 2, 4, 3, 4]
样例3:
输入:
n = 5
输出:[5, 4, 3, 2, 1, 5, 4, 3, 2, 5, 4, 3, 5, 4, 5]
解题思路:
问题理解
需要构造一个数组,对于每个 i
从 1
到 n
,将数字 n
到 i
逆序拼接,直到 i
等于 n
为止。
数据结构选择
选择了 vector<int>
来存储结果数组。
算法步骤
- 外层循环从
1
到n
,表示当前的i
。 - 内层循环从
n
到i
,将数字逆序添加到结果数组中。
最终代码:
#include <vector>
#include <iostream>
using namespace std;
vector<int> solution(int n) {
vector<int> result;
for(int i = 1;i<=n;i++){
for(int j = n;j>=i;j--){
result.push_back(j);
}
}
return result;
}
int main() {
vector<int> result1 = solution(3);
cout << (result1 == vector<int>{3, 2, 1, 3, 2, 3}) << endl;
vector<int> result2 = solution(4);
cout << (result2 == vector<int>{4, 3, 2, 1, 4, 3, 2, 4, 3, 4}) << endl;
vector<int> result3 = solution(5);
cout << (result3 == vector<int>{5, 4, 3, 2, 1, 5, 4, 3, 2, 5, 4, 3, 5, 4, 5}) << endl;
return 0;
}