#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;

}