c++二分法递归求数组的最大值、小矩阵匹配大矩阵、数组1在数组2的基础上输出不同的数据

87 阅读2分钟
#include <iostream>

using namespace std;

//递归实现数组中的最大值
int diGui(int* p, int Lp, int Rp) {
	int Lm, Rm;

	if (Lp == Rp) {
		return p[Lp];
	}
	else {
		Lm = diGui(p, Lp, (Lp + Rp) / 2);
		Rm = diGui(p, (Lp + Rp)/ 2+1, Rp);
		cout << "Lm:" << Lm << endl;
		cout << "Rm:" << Rm << endl;
		if (Lm > Rm) {
			return Lm;
		}
		else {
			return Rm;
		}
	}
}
int diGui2(int s[],int len) {
	//为1表示只有一个元素
	if (len == 1) {
		return s[0];
	}
	else {
		int max = diGui2(s, len-1);
		cout << max<<endl;
		if (max >= s[len - 1]) {
			return max;
		}
		else {
			return s[len - 1];
		}
	}
}
int main() {

	//1.有两个整型数组x和y,长度分别为N和M,编写程序将x数组中不在y数组里出现的元素输出。
	//声明两个整型数组x,y
	int x[5] = { 1,2,-2,5,6 };
	int y[7] = { -4,-3,2,5,7,8,9 };
	
	int flag;
	//双层循环判断,x数组的每一个元素是否在y数组中
	for (int i = 0; i < 5; i++) {
		flag = 0;//内层循环判断完毕后,要flag重置为0,不然在判断中无法设置flag的值
		for (int j = 0; j < 7; j++) {
			//有相同元素的时候,flag设置为1,并且跳出内层循环
			if (x[i] == y[j]) {
				flag = 1;
				break;
			}
		}
		if (flag == 0) {
			cout << x[i]<<endl;
		}
	}
	cout << "-------------------" << endl;
        
        
	//2.实现矩阵匹配,找一个较小矩阵在一个较大矩阵中的位置,并输出其左上角的位置
        
	//定义大矩阵和小矩阵
	int Barr[5][5] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25} };
	int Sarr[2][2] = { {3,4},{8,9} };

	int i, j, r, c, F=0, count;
	for (i = 0; i < 5; i++) {
		for (j = 0; j < 5; j++) {
			if (Barr[i][j] == Sarr[0][0] && i + 2 <= 5 && j + 2 <= 5) {
				count = 0;
				for (r = 0; r < 2; r++) {
					for (c = 0; c < 2; c++) {
						if (Barr[i + r][j + c] == Sarr[r][c]) {
							count++;
						}
					}
				}

				if (count == 2 * 2) {
					F = 1;
					cout << "i:" <<i<<",j:"<<j<< endl;
				}
			}

		}
	}
	if (F == 0) {
		cout << "没有找到!" << endl;
	}

	cout << "-------------------" << endl;
	//3.通过递归和二分法查找,求一个数组的最大值
        
        //第一种:采用二分法递归得出
	int arr3[7] = { 2,4,8,-2,8,10,6 };
	int max = diGui(arr3, 0, 6);
	cout << "数组最大的值为:" <<max<< endl;
        //2.采用单纯递归求出
       cout << "数组最大的值为:" << diGui2(arr3,7) << endl;
	return 0;
}