一维数组

概念讲解

什么是数组?

数组是一组相同类型的数据的集合,可以通过下标访问。

声明与初始化

12345678910// 声明
int a[100];

// 初始化
int b[5] = {1, 2, 3, 4, 5};
int c[5] = {1, 2};  // 其余为 0
int d[5] = {0};     // 全部为 0

// 自动推断大小
int e[] = {1, 2, 3, 4, 5};

访问元素

1234int a[5] = {10, 20, 30, 40, 50};
cout << a[0] << endl;  // 10
cout << a[4] << endl;  // 50
a[0] = 100;            // 修改元素

遍历数组

1234int a[5] = {10, 20, 30, 40, 50};
for (int i = 0; i < 5; i++) {
    cout << a[i] << " ";
}

常见应用

1. 计数

123456int cnt[100] = {0};
for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    cnt[x]++;
}

2. 标记

1234567bool visited[100] = {false};
for (int i = 0; i < n; i++) {
    if (!visited[i]) {
        visited[i] = true;
        // 处理
    }
}

3. 桶排序

1234567891011int bucket[100] = {0};
for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    bucket[x]++;
}
for (int i = 0; i < 100; i++) {
    for (int j = 0; j < bucket[i]; j++) {
        cout << i << " ";
    }
}

考点分析

初赛考查方式

  1. 选择题: 数组操作
  2. 程序阅读: 数组处理
  3. 填空题: 数组下标

常见题型

  • 数组遍历
  • 数组统计
  • 桶排序

例题精讲

例题 1:求数组最大值

题目: 求数组中的最大值。

解答:

123456int maxVal = a[0];
for (int i = 1; i < n; i++) {
    if (a[i] > maxVal) {
        maxVal = a[i];
    }
}

例题 2:数组逆序

题目: 将数组逆序输出。

解答:

123for (int i = n - 1; i >= 0; i--) {
    cout << a[i] << " ";
}

练习题

  1. 求数组的平均值。
查看答案
123456int sum = 0;
for (int i = 0; i < n; i++) {
    sum += a[i];
}
double avg = (double)sum / n;
cout << avg << endl;
  1. 统计数组中正数的个数。
查看答案
1234567int count = 0;
for (int i = 0; i < n; i++) {
    if (a[i] > 0) {
        count++;
    }
}
cout << count << endl;
  1. 将数组中的偶数放在前面,奇数放在后面。
查看答案
12345678910int left = 0, right = n - 1;
while (left < right) {
    while (left < right && a[left] % 2 == 0) left++;
    while (left < right && a[right] % 2 == 1) right--;
    if (left < right) {
        swap(a[left], a[right]);
        left++;
        right--;
    }
}

易错点

⚠️ 注意:

  1. 数组下标从 0 开始
  2. 注意数组越界问题
  3. 数组要初始化
  4. 注意数组大小限制