修改密码

【2024课程】零基础学会C++编程课程

成品课程

陈远龙老师主讲 & 答疑

课程题单 - T1000

未购买 · 可先试学25节课

课程目录展开/折叠

第29课 数组(刷题课)

播放快捷键

播放/暂停:空格(或鼠标单击)      全屏:F(或鼠标双击)      退出全屏:Esc

快进10 / 30 / 60秒:方向键→ / Ctrl + 方向键→ / Shift + 方向键→

快退10 / 30 / 60秒:方向键← / Ctrl + 方向键← / Shift + 方向键←

本节课讲解配套PPT&板书:

本节课讲解到的源代码

源代码下载:第29课 数组(刷题课)-源代码下载

1. C1001-站着的人-1
#include <bits/stdc++.h>
using namespace std;

// 用一个数组表示所有的人状态
bool a[10005];  // false => 代表的是站着的 true => 坐着的 

int main()
{
    int n, k;
    cin >> n >> k;

    // 模拟算法 
    // 从第2个人到第k个人 
    for (int i = 2; i <= k; i ++)
    {
        // i * 1  i * 2  i * 3  i * 4 <= n
        // 枚举倍数 j : 1 2 3 4 5 
        for (int j = 1; i * j <= n; j ++)
        {
            a[i * j] = !a[i * j];
        }
    }

    for (int i = 1; i <= n; i ++)
    {
        if (a[i] == false) cout << i << ' ';
    }

    return 0;
}
2. C1001-站着的人-2
#include <bits/stdc++.h>
using namespace std;

// 用一个数组表示所有的人状态
int a[10005];  // 0 => 代表的是站着的 1 => 坐着的 

int main()
{
    int n, k;
    cin >> n >> k;

    // 模拟算法 
    // 从第2个人到第k个人 
    for (int i = 2; i <= k; i ++)
    {
        // i 2i 3i 4i 5i 6i,枚举的是整体 
        for (int j = i; j <= n; j += i) // j = j + i
        {
            // a[j] = !a[j];
            if (a[j] == 0) a[j] = 1;
            else a[j] = 0;
        }
    }

    for (int i = 1; i <= n; i ++)
    {
        if (!a[i]) cout << i << ' ';
    }

    return 0;
}
3. P1034-陶陶摘苹果-1

#include <bits/stdc++.h>
using namespace std;

int a[15]; // 10个苹果的高度 
int h; // 手够到的高度 

int main()
{
    for (int i = 0; i < 10; i ++)
    {
        cin >> a[i];
    }

    cin >> h;

    // 枚举 + 模拟 
    int ans = 0; // answer答案 res result 
    for (int i = 0; i < 10; i ++)
    {
        if (h + 30 >= a[i]) ans ++;
    }

    cout << ans;

    return 0;
}
4. C1006-前缀和-1
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1e6 + 5;
int a[MAXN];

int main()
{
    // speed io
    const char endl = '\n';
    ios::sync_with_stdio(false);
    cin.tie(0);

    int m, n;
    cin >> m >> n;
    for (int i = 1; i <= m; i ++)
    {
        cin >> a[i];
    }

    int l, r;
    int sum = 0;
    while (n--)
    {
        sum = 0;
        cin >> l >> r;
        for (int i = l; i <= r; i ++)
        {
            sum += a[i];
        }
        cout << sum << endl;
    }

    return 0;
}
5. C1006-前缀和-2
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1e6 + 5;
int a[MAXN]; // 原数组 4MB
int s[MAXN]; // 前缀和数组 4MB 

int main()
{
    // speed io
    const char endl = '\n';
    ios::sync_with_stdio(false);
    cin.tie(0);

    int m, n;
    cin >> m >> n;
    for (int i = 1; i <= m; i ++)
    {
        cin >> a[i];
        s[i] = s[i - 1] + a[i];
    }

    while (n--)
    {
        int l, r;
        cin >> l >> r;
        cout << s[r] - s[l - 1] << endl;
    }

    return 0;
}
6. P1107-简单的排序-1
#include <bits/stdc++.h>
using namespace std;

int a[105];
int n;

int main()
{
    cin >> n;
    for (int i = 0; i < n; i ++)
    {
        cin >> a[i];
    }

    // 交换排序(选择排序的一个变种)
    for (int i = 0; i < n - 1; i ++)
    {
        for (int j = i + 1; j < n;j ++)
        {
            if (a[j] < a[i]) // swap(a[i], a[j]);
            {
                int t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
    } 

    for (int i = 0; i < n; i ++)
    {
        cout << a[i] << ' ';
    }

    return 0;
}
7. P1107-简单的排序-2
#include <bits/stdc++.h>
using namespace std;

int a[105];
int n;

int main()
{
    cin >> n;
    for (int i = 0; i < n; i ++)
    {
        cin >> a[i];
    }

    // 交换排序(选择排序的一个变种)
    for (int i = 0; i < n - 1; i ++)
    {
        for (int j = i + 1; j < n;j ++)
        {
            if (a[j] < a[i]) swap(a[i], a[j]);

        }
    } 

    for (int i = 0; i < n; i ++)
    {
        cout << a[i] << ' ';
    }

    return 0;
}

本节课答疑

建议大家有问题先通过AI答疑(比如:DeepSeek 等),AI时代需要学会使用AI辅助学习

陈远龙老师视频讲解:如何使用DeepSeek进行答疑?

通过AI未能获得满意解答的,可以联系陈远龙老师答疑

目录