CSP-202209-1-如此编码
解题思路
- 核心逻辑在于利用
arr1
和arr2
两个数组来逐步计算出每个c[i]
被使用的次数,这些次数即为题目中的b[i]
。 arr1[i] = m % c[i]
用于计算在用c[i]
整除m
后的余数,这个余数表示在当前级别i
上,m
还需要多少才能被c[i]
整除。arr2[i]
表示从m
中减去i-1
级别已经选择的部分后,剩余的部分。arr2[i] = arr1[i] - arr2[i - 1]
是用来更新m
的值,保证每一步的选择都是基于剩余的m
进行的。
#include <iostream>
using namespace std;int main() {int n, m;cin >> n >> m;int* a = new int[n + 1];int* c = new int[n + 1];int* arr1 = new int[n + 1];int* arr2 = new int[n + 1];for (int i = 0; i < n + 1; i++){a[i] = 0;c[i] = 1;arr1[i] = 0;}for (int i = 1; i <= n; i++){cin >> a[i];c[i] = a[i] * c[i - 1];arr1[i] = m % c[i];}arr2[0] = 0;for (int i = 1; i <= n; i++){arr2[i] = arr1[i] - arr2[i - 1];// b[i]cout << arr2[i] / c[i - 1] << " ";}delete[]a;delete[]c;delete[]arr1;delete[]arr2;return 0;
}