#1094 : Lost in the City 找到几个当年c语言留下的坑

思路很简单

对于Hi对象的3x3格子,我们需要存储9个位置。我们将九宫格中的中心2x2位置的单独拿出来做判断,若2x2位置的符合,再去匹配其他8个位置。

由于Hi对象可以旋转,因此,对于这8个位置需要用一个一维数组存储八个位置。

在进行遍历操作的时候,需要判断m数组的值是否满足地图数组a的值,并且将a中值旋转的四种状态都要做判断。

当然,做函数式处理,也是很重要的。

//解决的c语言坑见评论

代码如下:

void BuildHi(char** Lhi, char* m1){
	m1[0] = Lhi[0][0];
	m1[1] = Lhi[0][1];
	m1[2] = Lhi[0][2];
	m1[3] = Lhi[1][2];

	m1[4] = Lhi[2][2];
	m1[5] = Lhi[2][1];
	m1[6] = Lhi[2][0];
	m1[7] = Lhi[1][0];
}

bool FixedPosition(int i,int j,char**a,char* m1){

	if (a[i - 1][j - 1] == m1[0] && a[i-1][j] == m1[1] && a[i-1][j+1] == m1[2] 
		&& a[i][j+1] == m1[3] &&a[i+1][j+1] == m1[4] &&a[i+1][j] == m1[5] && 
		a[i+1][j-1] ==m1[6] && a[i][j-1] == m1[7]){
		return true;
	}

	if (a[i - 1][j - 1] == m1[6] && a[i - 1][j] == m1[7] && a[i - 1][j + 1] == m1[0]
		&& a[i][j + 1] == m1[1] && a[i + 1][j + 1] == m1[2] && a[i + 1][j] == m1[3] &&
		a[i + 1][j - 1] == m1[4] && a[i][j - 1] == m1[5]){
		return true;
	}

	if (a[i - 1][j - 1] == m1[4] && a[i - 1][j] == m1[5] && a[i - 1][j + 1] == m1[6]
		&& a[i][j + 1] == m1[7] && a[i + 1][j + 1] == m1[0] && a[i + 1][j] == m1[1] &&
		a[i + 1][j - 1] == m1[2] && a[i][j - 1] == m1[3]){
		return true;
	}

	if (a[i - 1][j - 1] == m1[2] && a[i - 1][j] == m1[3] && a[i - 1][j + 1] == m1[4]
		&& a[i][j + 1] == m1[5] && a[i + 1][j + 1] == m1[6] && a[i + 1][j] == m1[7] &&
		a[i + 1][j - 1] == m1[0] && a[i][j - 1] == m1[1]){
		return true;
	}

	return false;
}

void LittleHi(){
	int m, n;
	int hi = 3;
//	char Lhi[3][3];//所在位置矩阵
	char m1[8];	//记录两个旋转矩阵
	scanf("%d%d", &m, &n);
	char **Lhi = (char**)malloc(sizeof(char*) * 3);
	for (int i = 0; i < 3; ++i){//为每行分配4个大小空间
		Lhi[i] = (char*)malloc(sizeof(char) * 3);
	}

	//a is map
	char **a = (char**)malloc(sizeof(char*) * m);//为二维数组分配m行
	for (int i = 0; i < m; ++i){//为每行分配4个大小空间
		a[i] = (char*)malloc(sizeof(char) * n);
	}

	for (int i = 0; i < m; i++)
	{
			scanf("%s",&a[i][0]);
			//a[i][j]=getchar();
	}
	fflush(stdin);
	//Lhi自身有四种状态
	for (int i = 0; i < hi; i++)
	{
			scanf("%s", &Lhi[i][0]);
			//Lhi[i][j] = getchar();
	}

	BuildHi(Lhi, m1);

	//遍历匹配 m行 n列
	for (int i = 1; i < m-1; i++)
	{
		for (int j = 1; j < n-1; j++)
		{
			//表示中间单元格相等
			if (a[i][j] == Lhi[1][1]){
				if (FixedPosition(i, j, a, m1)){
					cout << i+1 << " " << j+1 << endl;
				}
			}
		}
	}
}



int _tmain(int argc, _TCHAR* argv[])
{
	LittleHi();
	return 0;
}


//指针问题

int _tmain(int argc, _TCHAR* argv[])
{
int a = 1;
int *b = &a;
//b = &a;
a++;
printf("%d\n",*b);
printf("%d\n",a);
return 0;
}


输出:2

    2



<think>好的,用户遇到了一个错误信息:“error: Connection to remote host was lost.”,也就是与远程主机的连接中断了。我需要帮他们分析可能的原因和解决方法。首先,我得考虑这个错误发生的常见场景,比如SSH连接、远程服务器访问、文件传输或者API调用等。接下来,应该从几个方面入手:网络问题、远程主机状态、防火墙或安全组设置、客户端配置、超时设置以及软件版本兼容性。 首先,网络连接不稳定是最常见的原因。可能需要检查用户的本地网络,比如让他们尝试ping远程主机或者用traceroute查看路径是否有问题。另外,如果使用Wi-Fi,建议换用有线连接,或者重启路由器。 然后是远程主机的状态。可能主机宕机了,或者服务没有运行。这时候需要用户确认远程主机是否在线,比如通过控制面板查看,或者联系服务提供商。如果是SSH,检查sshd服务是否在运行。 防火墙和安全组设置也很关键。有时候本地防火墙或者云服务的安全组规则会阻止连接。需要检查入站和出站规则,确保端口开放,比如SSH的22端口。 客户端配置错误也是一个可能因素,比如SSH的配置文件有误,或者使用了错误的密钥。建议用户检查配置文件,或者尝试用-vvv选项获取详细日志,帮助排查问题。 超时设置方面,如果网络延迟高,可能导致连接超时断开。可以调整客户端或服务器的超时参数,比如SSH的ServerAliveInterval。 软件版本兼容性也不能忽视,特别是旧版本的客户端可能存在bug。建议更新到最新版本,或者查看是否有已知的兼容性问题。 最后,如果所有方法都试过了还不行,可能需要联系网络管理员或服务提供商进一步排查。同时,用户的具体使用场景会影响排查方向,比如是SSH、数据库还是其他协议,可能需要针对性解答。需要确保回答清晰,分步骤说明,帮助用户一步步解决问题,并保持口语化,避免技术术语过多。</think>### 错误解释:`Connection to remote host was lost` 此错误表示客户端与远程主机的网络连接意外中断,常见于以下场景: - SSH 连接远程服务器 - 使用 FTP/SFTP 传输文件 - 访问数据库或 API 服务 - 远程调试或执行长时间任务 --- ### 排查步骤与解决方案 #### 1. **检查网络连接** - **本地网络问题** - 尝试 `ping <远程主机IP或域名>`,观察是否丢包或延迟过高。 - 使用 `traceroute <远程主机IP>`(Linux/macOS)或 `tracert <远程主机IP>`(Windows)检查路由路径是否存在中断。 - 如果使用 Wi-Fi,尝试切换为有线连接或重启路由器。 - **远程主机网络问题** - 确认远程主机是否在线(例如通过云服务商的控制台)。 - 联系服务提供商确认网络是否发生故障。 --- #### 2. **验证远程主机状态** - **服务是否运行** - 对于 SSH:检查远程主机的 `sshd` 服务是否运行(例如 `systemctl status sshd`)。 - 对于 Web 服务:尝试通过浏览器访问目标端口(如 `http://<IP>:<端口>`)。 - **资源过载** - 远程主机可能因 CPU、内存或带宽耗尽而拒绝连接。通过监控工具(如 `htop`、`nmon`)检查资源使用情况。 --- #### 3. **防火墙或安全组限制** - **本地防火墙** - 临时关闭防火墙测试(例如 `sudo ufw disable` 或 Windows 防火墙设置)。 - 确保出站规则允许连接到远程主机的端口(如 SSH 的 22 端口)。 - **云服务安全组** - 检查云平台(如 AWS、阿里云)的安全组规则,确认入站/出站流量是否放行目标端口。 --- #### 4. **客户端配置问题** - **SSH 配置错误** - 检查 `~/.ssh/config` 文件是否存在错误配置(如错误的 IP、端口或密钥路径)。 - 使用 `ssh -vvv user@host` 输出详细日志,定位具体错误阶段。 - **密钥认证失败** - 确认公钥已正确添加到远程主机的 `~/.ssh/authorized_keys` 文件。 - 检查密钥文件权限是否为 `600`(命令:`chmod 600 ~/.ssh/id_rsa`)。 --- #### 5. **超时设置** - **调整 SSH 超时参数** 在客户端 SSH 配置中添加以下参数,防止空闲连接断开: ``` ServerAliveInterval 60 ServerAliveCountMax 3 ``` - **服务端超时设置** 修改远程主机的 `/etc/ssh/sshd_config`,调整: ``` ClientAliveInterval 60 ClientAliveCountMax 3 ``` --- #### 6. **软件版本兼容性** - 更新客户端/服务端软件到最新版本(如 OpenSSH)。 - 旧版本可能存在协议不兼容或已知漏洞导致连接中断。 --- ### 快速测试方法 1. 尝试从其他设备(如手机热点)连接,排除本地网络问题。 2. 使用 `telnet <IP> <端口>` 或 `nc -zv <IP> <端口>` 测试端口连通性。 3. 重启客户端和服务端的相关服务(如 `sudo systemctl restart sshd`)。 --- ### 总结 若以上步骤均无效,请联系网络管理员或服务提供商,提供以下信息协助排查: - 错误发生的具体操作步骤 - 客户端和服务端日志 - `ping` 和 `traceroute` 测试结果
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值