48天笔试强训——第14天

92 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第26天,点击查看活动详情


选择题

image.png

子类成员能否被访问和this没有直接的联系。this指针保证每个对象拥有自己的数据成员,但共享处理这些数据的代码。

image.png

引用、const修饰的以及自定义类型必须在初始化列表进行初始化。所以选F

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

编程题

计算日期到天数转换

这一题还是简单的,在以前的练习中已经练过了,基本的思路就是枚举出所有月份的天数,二月份暂时先设为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;
}