总目录
1.rand()随机数函数
是C标准库 <cstdlib>
中的一个随机数生成函数,用于生成伪随机数。它返回一个在0到RAND_MAX
之间的整数,RAND_MAX
是一个预定义的常量,通常是一个较大的整数值(至少32767)。
使用 rand()
函数之前,通常需要调用 srand()
函数来初始化随机数种子,以确保每次程序运行时都能生成不同的随机数序列。srand()
函数的参数是一个整数,通常使用当前时间作为种子,例如:
cpp
#include <cstdlib>
#include <ctime>
int main() {
// 使用当前时间作为随机数种子
srand(time(0));
// 生成一个随机数
int random_number = rand();
return 0;
}
需要注意的是,rand()
函数生成的随机数序列是伪随机的,因为它是根据种子值计算的,而种子值通常是由系统时间提供的,所以在同一秒钟内调用 rand()
生成的随机数是相同的。如果需要更复杂的随机数生成算法,可以考虑使用 <random>
头文件中的更高级的随机数库。
先用随机函数(rand)按列优先初始化一个3行4列的数组(数组中元素的范围是【1,9】),然后判断该数组中是否有鞍点(即是否存在既是行上最大又是列上最小的元素)
cpp
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
// 初始化数组
void initializeArray(int array[][4], int rows, int cols) {
srand(time(0)); // 使用当前时间作为随机数种子
for (int j = 0; j < cols; ++j) {
for (int i = 0; i < rows; ++i) {
array[i][j] = rand() % 9 + 1; // 生成范围在1到9之间的随机数
}
}
}
// 判断是否为鞍点
bool isSaddlePoint(int array[][4], int rows, int cols, int rowIndex, int colIndex) {
int element = array[rowIndex][colIndex];
// 检查是否为行上最大值
for (int j = 0; j < cols; ++j) {
if (array[rowIndex][j] > element) {
return false; // 不是行上最大值,不是鞍点
}
}
// 检查是否为列上最小值
for (int i = 0; i < rows; ++i) {
if (array[i][colIndex] < element) {
return false; // 不是列上最小值,不是鞍点
}
}
return true; // 既是行上最大又是列上最小,是鞍点
}
int main() {
int array[3][4];
initializeArray(array, 3, 4);
// 打印数组
cout << "Array:" << endl;
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 4; ++j) {
cout << array[i][j] << " ";
}
cout << endl;
}
// 判断是否存在鞍点
bool hasSaddlePoint = false;
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 4; ++j) {
if (isSaddlePoint(array, 3, 4, i, j)) {
cout << "Saddle point found at position (" << i << ", " << j << "): " << array[i][j] << endl;
hasSaddlePoint = true;
}
}
}
if (!hasSaddlePoint) {
cout << "No saddle point found." << endl;
}
return 0;
}
2.函数模板(19年写一个二分查找函数模板用递归)
当然,请看下面的函数模板示例:
cpp
#include <iostream>
using namespace std;
// 定义一个函数模板
template <typename T>
T maximum(T x, T y) {
return (x > y) ? x : y;
}
int main() {
// 在模板函数中使用整数
cout << "Maximum of 5 and 10 is: " << maximum(5, 10) << endl;
// 在模板函数中使用浮点数
cout << "Maximum of 3.5 and 7.8 is: " << maximum(3.5, 7.8) << endl;
// 在模板函数中使用字符
cout << "Maximum of 'a' and 'z' is: " << maximum('a', 'z') << endl;
return 0;
}
这个例子中,maximum()
是一个函数模板,它可以比较不同类型的参数,并返回两者中的最大值。在 main()
函数中,我们分别使用了整数、浮点数和字符来调用 maximum()
函数模板,并输出了结果。在调用时,编译器会根据实参的类型自动生成对应的函数实例。
二分查找函数模板
以下是一个二分查找函数模板的示例:
cpp
#include <iostream>
#include <vector>
using namespace std;
// 定义一个函数模板
template<typename T>
int binarySearch(const vector<T>& sortedArray, const T& key) {
int left = 0;
int right = sortedArray.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (sortedArray[mid] == key) {
return mid; // 找到了
} else if (sortedArray[mid] < key) {
left = mid + 1; // 在右半部分继续查找
} else {
right = mid - 1; // 在左半部分继续查找
}
}
return -1; // 没有找到
}
int main() {
vector<int> numbers = {1, 3, 5, 7, 9, 11, 13, 15};
int key = 7;
int index = binarySearch(numbers, key);
if (index != -1) {
cout << "Element found at index: " << index << endl;
} else {
cout << "Element not found." << endl;
}
return 0;
}
这个示例中,binarySearch()
函数模板接受一个已排序的数组和一个要查找的关键字,并返回关键字在数组中的索引(如果存在),否则返回 -1。在 main()
函数中,我们使用一个已排序的整数向量调用了 binarySearch()
函数模板,并输出了结果。