(23、24)/48(6_13) 编程

1、微信红包(多种方法)

//1、哈希映射
int getValue(vector<int> gifts, int n)
{
	map<int, int> val_count_map;
	for (const auto &e : gifts)
	{
		val_count_map[e]++;
	}
	for (const auto &e : val_count_map)
	{
		if (e.second>n / 2)
			return e.first;
	}
	return 0;
}
//2、排序、取中间值
int getValue(vector<int> gifts, int n) {
	sort(gifts.begin(), gifts.end());
	int mid_val = gifts[n / 2];
	int count = 0;
	for (const auto &e : gifts)
	{
		if (mid_val == e)
			count++;
	}
	if (count > n / 2)
		return mid_val;
	return 0;
}
//3、dp
int getValue(vector<int> gifts, int n) {
	int flag = 1;
	int res = gifts[0];
	int count = 0;
	if (n == 1)
		return res;
	for (int i = 1; i < n; i++) {
		if (flag == 0) {
			res = gifts[i];
			flag = 1;
			continue;
		}
		if (res == gifts[i])
			++flag;
		else
			--flag;
	}
	for (int i = 0; i < n; ++i) {
		if (res == gifts[i])
			++count;
	}
	if (count > n / 2)
		return res;
	else
		return 0;
}

2、计算字符串的距离

int GetMinDistance(string s1, string s2) {
	if (s1.empty() || s2.empty())
		return max(s1.size(), s2.size());
	int len1 = s1.size();
	int len2 = s2.size();
	vector<vector<int>> f(len1 + 1, vector<int>(len2 + 1, 0));
	for (int i = 0; i <= len1; ++i)
		f[i][0] = i;
	for (int j = 0; j <= len2; ++j)
		f[0][j] = j;
	for (int i = 1; i <= len1; ++i) {
		for (int j = 1; j <= len2; ++j) {
			if (s1[i - 1] == s2[j - 1]) {
				f[i][j] = min(f[i - 1][j], f[i][j - 1]) + 1;
				f[i][j] = min(f[i - 1][j - 1], f[i][j]);
			}
			else {
				f[i][j] = min(f[i - 1][j], f[i][j - 1]) + 1;
				f[i][j] = min(f[i - 1][j - 1] + 1, f[i][j]);
			}
		}

	}
	return f[len1][len2];
}

3、年终奖(dp)

int getMost(vector<vector<int> > board) {
	int row = board.size();
	int col = board[0].size();

	vector<vector<int>> allPrice(row + 1, vector<int>(col + 1, 0));
	for (int i = 1; i <= row; ++i)
	{
		for (int j = 1; j <= col; ++j)
		{
			allPrice[i][j] = max(allPrice[i - 1][j], allPrice[i][j - 1]) + board[i - 1][j - 1];
		}
	}
	return allPrice[row][col];
}

4、迷宫问题

int row, col;
vector<vector<int>> maze;
vector<vector<int>> path_tmp;
vector<vector<int>> path_best;

void mazeTrack(int i, int j) {
	maze[i][j] = 1; //代表点(i,j)已经走过
	path_tmp.push_back({ i, j });
	//判断是否到达出口
	if (i == row - 1 && j == col - 1) {
		//寻找最短路径
		if (path_best.empty() || path_best.size() > path_tmp.size())
			path_best = path_tmp;
	}
	//向右走
	if (j + 1 < col && maze[i][j + 1] == 0)
		mazeTrack(i, j + 1);
	//向左走
	if (j - 1 >= 0 && maze[i][j - 1] == 0)
		mazeTrack(i, j - 1);
	//向上走
	if (i - 1 >= 0 && maze[i - 1][j] == 0)
		mazeTrack(i - 1, j);
	//向下走
	if (i + 1 < row && maze[i + 1][j] == 0)
		mazeTrack(i + 1, j);
	maze[i][j] = 0;      //回溯;恢复路径
	path_tmp.pop_back();
}

int main() {
	while (cin >> row >> col) {
		maze = vector<vector<int>>(row, vector<int>(col, 0));
		path_tmp.clear();
		path_best.clear();
		for (int i = 0; i < row; ++i)
			for (int j = 0; j < col; ++j)
				cin >> maze[i][j];
		mazeTrack(0, 0);
		//输出路径
		for (int i = 0; i < path_best.size(); ++i)
		{
			cout << "(" << path_best[i][0] << "," << path_best[i][1] << ")" << endl;
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您可以使用以下 T-SQL 代码求 1 到 150 之和: ``` DECLARE @sum INT = 0; SELECT @sum = @sum + number FROM (VALUES (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), (26), (27), (28), (29), (30), (31), (32), (33), (34), (35), (36), (37), (38), (39), (40), (41), (42), (43), (44), (45), (46), (47), (48), (49), (50), (51), (52), (53), (54), (55), (56), (57), (58), (59), (60), (61), (62), (63), (64), (65), (66), (67), (68), (69), (70), (71), (72), (73), (74), (75), (76), (77), (78), (79), (80), (81), (82), (83), (84), (85), (86), (87), (88), (89), (90), (91), (92), (93), (94), (95), (96), (97), (98), (99), (100), (101), (102), (103), (104), (105), (106), (107), (108), (109), (110), (111), (112), (113), (114), (115), (116), (117), (118), (119), (120), (121), (122), (123), (124), (125), (126), (127), (128), (129), (130), (131), (132), (133), (134), (135), (136), (137), (138), (139), (140), (141), (142), (143), (144), (145), (146), (147), (148), (149), (150)) AS t(number); SELECT @sum; ``` 这段代码使用了 T-SQL 中的 VALUES 关键字来创建一个虚拟表,并将数字 1 到 150 插入到这个表中。然后使用 SELECT 语句来求和。最后,使用 SELECT 语句输出结果。 ### 回答2: 在T-SQL语言中,我们可以使用循环和变量来求解1-150之和。下面是一个示例的T-SQL代码: ``` DECLARE @sum INT DECLARE @counter INT SET @sum = 0 SET @counter = 1 WHILE @counter <= 150 BEGIN SET @sum = @sum + @counter SET @counter = @counter + 1 END SELECT @sum AS '总和' ``` 以上代码中,我们首先声明了两个变量@sum和@counter,用于存储求和结果和当前循环的数字。然后,我们使用SET语句对这两个变量进行初始化。 接下来,通过使用WHILE循环,我们重复执行累加操作,直到@counter的值大于150。在每次循环中,我们将@counter的值加到@sum中,并将@counter自增1。 最后,使用SELECT语句输出变量@sum的值,即为1-150之和。 运行以上代码,我们将得到输出结果为`11325`,代表1-150之和为11325。 ### 回答3: 使用T-SQL语言编程求1-150之和可以通过循环迭代的方式实现。 首先,我们可以创建一个变量来保存求和的结果,并初始化为0。然后,使用循环迭代从1到150,每次将当前数字累加到结果变量中。 以下是使用T-SQL语言编程实现求1-150之和的代码: ```sql DECLARE @sum INT = 0; DECLARE @num INT = 1; WHILE @num <= 150 BEGIN SET @sum = @sum + @num; SET @num = @num + 1; END SELECT @sum; ``` 以上代码中,我们使用`DECLARE`语句创建了两个变量`@sum`和`@num`,分别用于保存求和的结果和迭代的数字。然后,使用`WHILE`循环来迭代从1到150的数字,将每次迭代的数字累加到结果变量`@sum`中。最后,使用`SELECT`语句输出计算结果`@sum`。 执行以上代码后,可以得到1-150之和的结果。在本例中,结果为11325。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值