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

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;
}
相关推荐
@蓝莓果粒茶5 分钟前
LeetCode第131题_分割回文串
开发语言·前端·算法·leetcode·职场和发展·c#·.net
雾里看山25 分钟前
算法思想之滑动窗口(一)
算法·leetcode·推荐算法
共享家952736 分钟前
深入探究C++ 运算符重载:以日期类为例
c++
神奇的黄豆1 小时前
Scala 面向对象编程总结
数据结构·scala
老歌老听老掉牙1 小时前
C++使用Qt Charts创建数据可视化图表
c++·qt·信息可视化
猫咪-95271 小时前
链表算法中常用操作和技巧
数据结构·算法·链表
被AI抢饭碗的人1 小时前
算法题(114):矩阵距离
算法
javaisC1 小时前
数据结构----------顺序查找,折半查找和分块查找(java实现)
java·数据结构·算法
Mcband1 小时前
主流程发起,去除子流程的时长计算问题
java·前端·算法
爽帅_2 小时前
【C++】STL库_stack_queue 的模拟实现
开发语言·c++