Skip to content

数组

包括一维数组与二维数组相关的题型。

P0401001-逆序输出数组元素

题目描述

从外部读入 n 个整数到数组,逆序输出该数组中的所有元素

输入描述

输入为两行。

第一行为一个正整数 n,代表要输入 n 个数到数组 (1n100

第二行为 n 个整数。

输出描述

逆序输出数组中的所有元素,元素之间用空格分隔

输入输出样例

输入数据

5
1 2 3 4 5

输出数据

5 4 3 2 1

参考代码

cpp
#include <iostream>
using namespace std;

int main(){
    int a[110]; // 一般多申请空间多 5 到 10
    int n;
    cin >> n;

    // 输入数据
    for (int i = 0; i < n; i++) cin >> a[i];
    
    // 逆序输出数据
    for (int i = n - 1; i >= 0; i--) cout << a[i] << " ";
    
    return 0;
}
py
# 读取输入
n = int(input())
arr = list(map(int, input().split()))

# 逆序输出数组中的所有元素
reversed_arr = arr[::-1]
print(*reversed_arr)

P0401002-交换数组元素

题目描述

从外部读入 n 个整数到数组,交换数组中的第一个和最后一个元素,并输出交换后的数组元素。

输入描述

输入为两行。

第一行为一个正整数 n,代表要输入 n 个数到数组 (1n100

第二行为 n 个整数。

输出描述

交换数组中的第一个和最后一个元素,并输出交换后数组中的所有元素,元素之间用空格分隔

输入输出样例

输入数据

5
1 2 3 4 5

输出数据

5 2 3 4 1

参考代码

cpp
#include <iostream>
using namespace std;

int main(){
    int a[110]; // 一般多申请空间多 5 到 10
    int n;
    cin >> n;

    // 输入数据
    for (int i = 0; i < n; i++) cin >> a[i];
    
    // 交换元素
    int tmp = a[0];
    a[0] = a[n-1];
    a[n-1] = tmp;
    
    // 逆序输出数据
    for (int i = 0; i < n; i++) cout << a[i] << " " ;
    
    return 0;
}
py

P0401003-求数组元素最小值

题目描述

输入一个整数 n,并从外部读入 n 个数据到数组 a,找出数组 a 中所有元素的最小值,并输出它的值和下标。若有多个最小值,则返回下标最小的那个数。

输入描述

输入为两行。

第一行为一个正整数 n,代表要输入 n 个数到数组 (1n1000)。

第二行为 n 个整数。

输出描述

输出为两行。第一行为数组中的元素最小值,第二行为该最小值的下标。

输入输出样例:

输入

8
2 8 -1 3 -3 7 9 0

输出

-3
4

参考代码

cpp
#include <iostream>
using namespace std;

const int N = 1010;

int a[N];

int main() {
    int n;
    cin >> n;
    
    for (int i = 0; i < n; i++) cin >> a[i];
    
    int min_index = 0; // 选择最初的擂主
    
    // 依次打擂,求出最小值的下标
    for (int i = 1; i < n; i ++) {
      if (a[i] < a[min_index]) min_index = i;
    }
    
    // 输出结果
    cout <<  a[min_index] << endl;
    cout <<  min_index << endl;
  
    return 0;
}
py

P0401004-数组的旋转

题目描述

输入一个整数 n,再输入 n 个整数。将这个数组顺时针旋转 k 次,最后将结果输出。

这里旋转一次是指:将数组最右边的数放到最左边,旋转两次就是重复两次这样的操作。

例如一个数组有下面 5 个整数:

1 2 3 4 5

旋转一次就是把最后一个数字挪到最前面去,得到 5 1 2 3 4 。旋转两次就是按同样的规则做两次操作,结果应该是 4 5 1 2 3

输入描述

输入为两行。

第一行为两个整数 nkn 代表要输入 n 个数到数组 (1n1000),k 代表要旋转的次数(kn

第二行为 n 个整数。

输出描述

输出旋转后数组的所有元素,每个元素之间用空格隔开

输入输出样例

输入:

5 2
1 2 3 4 5

输出:

4 5 1 2 3

参考代码

cpp
#include <iostream>
using namespace std;

const int N = 100;
int a[N];

int main() {
    int n, k;
    cin >> n >> k;
    
    for (int i = 0; i < n; i++) cin >> a[i];
    
    // 倒着去依次挪位置
    while (k--) {
      int t = a[n - 1]; // 将最后一个元素临时存起来
      
      for (int i = n - 2; i >= 0; i--) {
        a[i + 1] = a[i];
      }
      
      a[0] = t; // 第一个位置挪出来后,把临时存的数据放进去
    }
    
    for (int i = 0; i < n; i++) cout << a[i] << ' ';
    
    return 0;
}
py

P0401005-查找含有x的数

问题描述

请从一组数中找出含有 x 的数,统计出这样的数总共有多少个,总和是多少?

输入描述

输入包含三行:

第一行为 N,表示这组整数总共有多少个数( N1000 );

第二行为 N 个整数(这些整数都是 1~9999之间的数),整数之间以一个空格分开;

第三行包含一个一位的整数 xx 是一个 1~9之间的一位数)。

输出描述

输出一行,有 2 个整数用空格隔开,第一个整数代表含有 x 的数的总个数,第二个整数代表含有 x 的数的总和。

输入输出样例

输入数据

5
12 28 190 36 1255
2

输出数据

3 1295

参考代码

cpp
#include <iostream>
using namespace std;

const int N = 1010;
int q[N];

bool contain_x(int n, int x) {
  while (n > 0) {
    if (n % 10 == x) return true;
    n = n / 10;
  }
  return false;
}

int main() {
  int n, x, cnt = 0, sum = 0;
  cin >> n;
  
  for (int i = 0; i < n; i++) cin >> q[i];
  
  cin >> x;
  
  for (int i = 0; i < n;i ++) {
    if (contain_x(q[i], x)) {
      cnt++;
      sum = sum + q[i];
    }
  }
  
  cout << cnt << " ";
  cout << sum << endl;
  
  return 0;
}
py