持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第26天,点击查看活动详情
选择题
子类成员能否被访问和
this没有直接的联系。this指针保证每个对象拥有自己的数据成员,但共享处理这些数据的代码。
引用、const修饰的以及自定义类型必须在初始化列表进行初始化。所以选F
编程题
这一题还是简单的,在以前的练习中已经练过了,基本的思路就是枚举出所有月份的天数,二月份暂时先设为28,然后再判断是否为闰年,当为闰年的时候,就要把二月份的天数变成29。最后的天数就是该月份之前所有月数之和加上该月实际的天数。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int getLuckyPacket(int x[], int n, int pos, int sum, int multi) {
int count = 0;
//循环,搜索以位置i开始所有可能的组合
for (int i = pos; i < n; i++) {
sum += x[i];
multi *= x[i];
if (sum > multi) {
//找到符合要求的组合,加1,继续累加后续的值,看是否有符合要求的集合
count += 1 + getLuckyPacket(x, n, i + 1, sum, multi);
} else if (x[i] == 1) {
//如何不符合要求,且当前元素值为1,则继续向后搜索
count += getLuckyPacket(x, n, i + 1, sum, multi);
} else {
//如何sum大于multi,则后面就没有符合要求的组合了
break;
} // 要搜索下一个位置之前,首先恢复sum和multi
sum -= x[i];
multi /= x[i];
//数字相同的球,没有什么区别,都只能算一个组合,所以直接跳过
while (i < n - 1 && x[i] == x[i + 1]) {
i++;
}
} return count;
} int main() {
int n;
while (cin >> n) {
int x[n];
for (int i = 0; i < n; i++) {
cin >> x[i];
} sort(x, x + n);
//从第一个位置开始搜索
cout << getLuckyPacket(x, n, 0, 0, 1) << endl;
} return 0;
}