c++数组元素极值分离

191 阅读1分钟
#include <iostream>
#include <iomanip>

using namespace std;

int printShulie(int model, int num)
{
	if (model == 1) {
		if (num == 1 || num == 2)
		{
			return 1;
		}
		else
		{
			return printShulie(1, num - 1) + printShulie(1, num - 2);
		}
	}
	else if (model == 2) {
		if (num == 1) {
			return 1;
		}
		else {
			return  num * printShulie(2, num - 1);
		}
	}

}
int main2() {

	//1.设有5 行5 列的数组b,其元素b[i][j] = 3 * i + 2 * j - 8(i、j = 01234)。 
	/*编程序,实现:①求第4 行的5 个元素之累加和。②求第5 列的5 个元素之平均值。
		③求主对角线(“\”状对角线)以及反斜对角线(“ / ”状对角线)上各有多少个负数;*/
	int arr2[5][5]; //定义5*5的数组
	int sum1 = 0, sum2 = 0, count1 = 0, count2 = 0;
	//对数组元素按照指定规律进行初始化
	for (int i = 0; i < 5; i++) {
		for (int j = 0; j < 5; j++) {
			arr2[i][j] = 3 * i + 2 * j - 8;
			//cout << "数组元素:" << arr[i][j] << endl;
			cout << setw(4) << arr2[i][j] ;
		}
		cout << endl; //每打印一行进行换行显示
	}

	for (int j = 0; j < 5; j++) {
		sum1 += arr2[3][j];
	}
	for (int k = 0; k < 5; k++) {
		sum2 += arr2[k][4];
		if (arr2[k][k] < 0) {
			count1++;
		}
		if (arr2[k][4 - k] < 0) {
			count2++;
		}

	}
	cout << "第4行的5 个元素之累加和为:" << sum1 << endl;
	cout << "第5列的5个元素累加和为:" << sum2 <<",第5列的5个元素平均值为"<<sum2/5 << endl;
	cout << "主对角线负数的个数为:" << count1 <<",反斜对角线负数的个数为:"<< count2 << endl;

	cout << "-----------------------------------------------------------------" << endl;
	//2.有一个长度为N的整数数组,它由若干连续递增和递减子序列构成,
	/*例如123456543210123210。现打算将其在极值处进行分离,切断成若干子序列分别输出。
		按照要求,运行程序后,被分离后的输出结果是:*/
		/*1 2 3 4 5 6
		5 4 3 2 1 0
		0 1 2 3
		3 2 1 0*/

	int arr[18] = { 1,2,3,4,5,6,5,4,3,2,1,0,1,2,3,2,1,0 };
	int j = 0;
	for (int i = 0; i < 17; i++) {
		if (arr[i + 1] > arr[i] && arr[i + 2] > arr[i + 1]) {
			// 递增序列
			for (j = i; arr[j + 1] > arr[j]; j++) {
				cout << arr[j] << " ";
			}
		}
		//i = 5,
		else if (arr[i + 1] < arr[i] && arr[i + 2] < arr[i + 1]) {
			for (j = i; arr[j + 1] < arr[j]; j++) {
				cout << arr[j] << " ";
			}
		}
		if (j < 17) {
			cout << "j的值:"<<j<<"," << arr[j];
		}
		cout << endl;
		i = j;
	}

	//3、编写一个函数,以递归形式求斐波那契数列的第N项。再利用此函数求这个数列的前N项和
	int n;
	cout << "请输入要计算的斐波那契数列的第N项,以及数列前n项的和" << endl;
	cin >> n;
	int Fsum = printShulie(1, n);
	int Ssum = printShulie(2, n);
	cout << "斐波那契数列的第"<<n<<"项的和为" <<Fsum<< endl;
	cout << "数列的第"<<n<<"项的和为" <<Ssum<< endl;
	return 0;
}