- niehuanlin's blog
数组 课堂教学意义
- 2023-8-14 11:15:27 @
#include <bits/stdc++.h>
using namespace std;
//int arr[100]; // 全局变量,自动置零
//int sum; // 全局变量,自动置零
int main() {
// 数组
// 1. 一维数组的操作
// (1) 使用 1 号元素
int n;
cin >> n;
const int MAXSIZE = 100; // 常量
int arr[MAXSIZE]; // 数组的定义
memset(arr, 0, sizeof(arr)); // 批量置零
// 一维数组 批量读取
for (int i = 1; i <= n; i++) {
cin >> arr[i];
}
sort(arr + 1, arr + 1 + n); // 排序
// 一维数组 批量输出
for (int i = 1; i <= n; i++) {
cout << arr[i] << " ";
}
cout << endl;
// (2) 使用 0 号 元素
int n;
cin >> n;
const int MAXSIZE = 100; // 常量
int arr[MAXSIZE]; // 数组的定义
memset(arr, 0, sizeof(arr)); // 批量置零
// 一维数组 批量读取
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
sort(arr, arr + n); // 排序
// 一维数组 批量输出
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
// 2、一维数组的查找
int n;
cin >> n;
int key = 20;
int arr[100 + 1];
memset(arr, 0, sizeof(arr));
for (int i = 1; i <= n; i++) {
cin >> arr[i];
}
// (1) 顺序查找
bool found = false;
for (int i = 1; i <= n; i++) {
if (arr[i] == key) {
found = true;
}
}
if (found) {
cout << "found" << endl;
} else {
cout << "not found" << endl;
}
// (2) 二分法查找
bool found = false;
int left = 1;
int right = n;
int mid;
while (left <= right) {
mid = (left + right) / 2;
if (key == arr[mid]) {
found = true;
break;
} else if (key < arr[mid]) {
right = mid - 1;
} else {
left = mid + 1;
}
}
if (found) {
cout << "found" << endl;
} else {
cout << "not found" << endl;
}
// 3、一维数组的排序
int n;
cin >> n;
const int MAXSIZE = 100 + 1;
int arr[MAXSIZE];
memset(arr, 0, sizeof(arr));
for (int i = 1; i <= n; i++) {
cin >> arr[i];
}
// (1) 冒泡排序
for (int i = 1; i <= n; i++) {
for (int j = n; j > i; j--) {
if (arr[j] < arr[j - 1]) { // < 升序,> 降序
swap(arr[j], arr[j - 1]);
}
}
}
// (2) 冒泡排序(优化,用于接近完成的序列)
bool exchange;
for (int i = 1; i <= n; i++) {
exchange = false;
for (int j = n; j > i; j--) {
if (arr[j] < arr[j - 1]) { // < 升序,> 降序
swap(arr[j], arr[j - 1]);
cout << "swap : " << arr[j] << " <-> " << arr[j - 1] << endl;
exchange = true;
}
}
if (!exchange) break;
}
// (3) 选择排序
for (int i = 1; i < n; i++) {
for (int j = i; j <= n; j++) {
if (arr[i] > arr[j]) { // 确定擂主
swap(arr[i], arr[j]);
}
}
}
// (3) 插入排序
for (int i = 1; i <= n; i++) {
for (int j = i; j > 1; j--) {
if (arr[j] < arr[j - 1]) {
swap(arr[j], arr[j - 1]);
}
}
}
for (int i = 1; i <= n; i++) {
cout << arr[i] << " ";
}
cout << endl;
// (4) 计数排序
int n;
cin >> n;
const int MAXSIZE = 100 + 1;
int arr[MAXSIZE];
memset(arr, 0, sizeof(arr));
int num;
for (int i = 1; i <= n; i++) {
cin >> num;
arr[num]++;
}
// 去重输出
for (int i = 1; i <= MAXSIZE; i++) {
if (arr[i] > 0) {
cout << i << " ";
}
}
cout << endl;
// 重复元素输出
for (int i = 1; i <= MAXSIZE; i++) {
while (arr[i] > 0) {
cout << i << " ";
arr[i]--;
}
}
cout << endl;
// (5) sort 排序
int n;
cin >> n;
const int MAXSIZE = 100 + 1;
int arr[MAXSIZE];
memset(arr, 0, sizeof(arr));
for (int i = 1; i <= n; i++) {
cin >> arr[i];
}
sort(arr + 1, arr + 1 + n); // 升序排序
sort(arr + 1, arr + 1 + n, greater<int>()); // 降序排序
for (int i = 1; i <= n; i++) {
cout << arr[i] << " ";
}
cout << endl;
int cnt = unique(arr + 1, arr + 1 + n) - (arr + 1); // 去重 , 并返回去重后的数量
for (int i = 1; i <= cnt; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
// 4、多维数组
// (1) 二维数组
int arr[100][100];
memset(arr, 0, sizeof(arr));
int n, m;
cin >> n >> m;
// input
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> arr[i][j];
}
}
// process
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
arr[i][j] += 100;
}
}
// output
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
cout << endl;
// (2) 三维数组
int arr[10][10][10];
memset(arr, 0, sizeof(arr));
int n, m, l;
cin >> n >> m >> l;
// input
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
for (int k = 1; k <= l; k++) {
cin >> arr[i][j][k];
}
}
}
// process
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
for (int k = 1; k <= l; k++) {
arr[i][j][k] += 1000;
}
}
}
// output
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cout << "[";
for (int k = 1; k <= l; k++) {
cout << arr[i][j][k] << ", ";
}
cout << "], ";
}
}
cout << endl;
// 杨辉三角形
int n;
cin >> n;
// process
for (int i = 1; i <= n; i++) {
arr[i][1] = 1;
for (int j = 2; j < n; j++) {
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
arr[i][n] = 1;
}
// output
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
// 5、字符数组
char arr[100];
memset(arr, 0, sizeof(arr));
// 读取 字符数组 (遇空格或回车停止)
cin >> arr;
// 整行读取 字符数组 (遇回车停止)
cin.getline(arr, sizeof(arr));
arr[5] = '\0'; // 字符串 遇 0 终止输出
// 输出 字符数组
cout << arr << endl;
// 输出 单个字符
cout << arr[0] << endl;
cout << int(arr[5]) << endl;
// 批量输出
for (int i = 0; i < strlen(arr); i++) {
cout << arr[i] << " ";
}
cout << endl;
// (1) 字符处理函数
// 数字 和 数字字符 相互转换
int n;
cin >> n;
cout << n * 10 << endl;
char c;
cin >> c;
c = c - '0';
cout << int(c) << endl;
cout << c * 10 << endl;
// 字符处理函数
char c;
cin >> c;
if (c >= '0' && c <= '9') {
cout << c << " 是 数字字符" << endl;
}
if (isdigit(c)) {
cout << c << " 是 数字字符" << endl;
}
if (c >= 'A' && c <= 'Z') {
cout << c << " 是 大写字母" << endl;
}
if (c >= 'a' && c <= 'z') {
cout << c << " 是 小写字母" << endl;
}
if (isalpha(c)) {
cout << c << " 是 字母" << endl;
}
if (isalnum(c)) {
cout << c << " 是 数字或字母" << endl;
}
if (islower(c)) {
cout << c << " 是 小写字母" << endl;
cout << "转换大写字母:" << char(toupper(c)) << endl;
}
if (isupper(c)) {
cout << c << " 是 大写字母" << endl;
cout << "转换小写字母:" << char(tolower(c)) << endl;
}
// 字符数组 处理函数
char arr[100];
memset(arr, 0, sizeof(arr));
// cin >> arr; cin.getline(arr, sizeof(arr));
cout << "字符的有效长度:" << strlen(arr) << endl;
char arr1[100];
memset(arr1, 0, sizeof(arr1));
char arr2[100];
memset(arr2, 0, sizeof(arr2));
cin >> arr1 >> arr2;
strcat(arr1, arr2); // 字符串拼合
strcpy(arr1, arr2); // 字符串复制
cout << arr1 << endl;
cout << arr2 << endl;
cout << strcmp(arr1, arr2) << endl; // 字符串比较
return 0;
}