学堂在线C++语言程序设计基础(自主模式)第六章编程作业题

C6-1 最大子数组和

题目描述

给定一个数组a[0,...,n-1],求其最大子数组(长度>=1)和
输入描述第一行一个整数n(1<=n<=5000),然后依次输入n个整数(每个整数范围[-5000, 5000])
输出描述

输出一个整数表示最大子数组和

//学堂在线C++第六章编程作业题第一题
#include <iostream>
using namespace std;

int main() {
	int max = -5000, n, i, x, sum = 0;

	cin >> n;
	cin >> x;
	max = x; sum = x;
	for (i = 1; i < n; ++i) {
		cin >> x;
		if (max < x)
			max = x;
		sum += x;
		if (max < sum)
			max = sum;
		if (sum < 0)
			sum = 0;
	}

	cout << max;

	return 0;
}

C6-2 字符串的回文子序列个数

题目描述

求一个长度不超过15的字符串的回文子序列个数(子序列长度>=1)。
输入描述

输入一个长度不超过15的字符串,字符串均由小写字母表示
输出描述

输出其回文子序列个数

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main() {

	string s, s1;
	int leng;
	

	cin >> s;
	leng = s.length();
	vector<vector<int>> dp(leng, vector<int>(leng));
	for (int j = 0; j < leng; ++j) {
		dp[j][j] = 1;
		for (int i = j - 1; i >= 0; --i) {
			dp[i][j] = dp[i + 1][j] + dp[i][j - 1] - dp[i + 1][j - 1];
			if (s[i] == s[j])
				dp[i][j] += 1 + dp[i + 1][j - 1];
		}
	}
	
	cout << dp[0][leng - 1];

	return 0;
}

C6-3 数组第K小数

题目描述

给定一个整数数组a[0,...,n-1],求数组中第k小数
输入描述

首先输入数组长度n和k,其中1<=n<=5000, 1<=k<=n

然后输出n个整形元素,每个数的范围[1, 5000]


#include <iostream>
#include <algorithm>
using namespace std;

int main() {

	int n, k, a[5000];
	cin >> n >> k;

	for (int i = 0; i < n; ++i)
		cin >> a[i];

	sort(a, a + n);
	cout << a[k - 1];

	return 0;
}


输出描述

该数组中第k小数

猜你喜欢

转载自blog.csdn.net/weixin_42183401/article/details/81273164