模拟桌面自动整理, 先顶左,再顶上。

5 6

**##**

****#*

***##*

#*****

***#**

##****

##****

#*****

#*****

#*****

cpp 复制代码
#include<iostream> 
using namespace std;
#define MAX  1024

char a[MAX][MAX];
void H(char arr[][MAX], int n,int idx) {//n列数	,idx 某行
	int left = 0;
	int right = n - 1;
	char t;
	while (left < right) {
		int left = 0;
		int right = n - 1;

		while (arr[idx][left] == '#')
			left++;
		while (arr[idx][right] == '*')
			right--;
		if (left >= right)
			break;

		t = arr[idx][left];
		arr[idx][left] = arr[idx][right];
		arr[idx][right] = t; 
	}
}


void L(char arr[][MAX], int n, int idx) {//n行数	,idx 某列
	int top = 0;
	int down = n - 1;
	char t;
	while (top < down) {
		int top = 0;
		int right = n - 1;

		while (arr[top][idx] == '#')
			top++;
		while (arr[down][idx] == '*')
			down--;
		if (top >= down)
			break;

		t = arr[top][idx];
		arr[top][idx] = arr[down][idx];
		arr[down][idx] = t;
	}
}


 
void print(int h,int l) {
	for (int i = 0; i < h; i++) {
		for (int j = 0; j < l; j++)
			cout << a[i][j];
		cout << endl;
	}
}

int main() {
	int h, l;
	cin >> h>>l;
	for (int i = 0; i < h; i++) {
		for (int j = 0; j < l; j++)
			cin >> a[i][j];
		getchar();
	}
	//print(h,l);

	for (int i = 0; i < h; i++) 
		H(a,l,i);
	

	for (int i = 0; i < h; i++) 	
		L(a,h,i);
	print(h, l);

	

	return 0;
}
相关推荐
来荔枝一大筐31 分钟前
力扣 寻找两个正序数组的中位数
算法
算法与编程之美42 分钟前
理解Java finalize函数
java·开发语言·jvm·算法
怕什么真理无穷1 小时前
C++面试4-线程同步
java·c++·面试
学编程就要猛1 小时前
数据结构初阶:Java中的Stack和Queue
数据结构
地平线开发者1 小时前
LLM 训练基础概念与流程简介
算法·自动驾驶
是苏浙1 小时前
零基础入门C语言之C语言实现数据结构之顺序表
c语言·开发语言·数据结构
点云SLAM1 小时前
弱纹理图像特征匹配算法推荐汇总
人工智能·深度学习·算法·计算机视觉·机器人·slam·弱纹理图像特征匹配
星释1 小时前
Rust 练习册 :Matching Brackets与栈数据结构
数据结构·算法·rust
地平线开发者1 小时前
Camsys 时间戳信息简介
算法·自动驾驶
星释1 小时前
Rust 练习册 :Luhn与校验算法
java·算法·rust