中兴2018届应届生在线编程测验0829 数学家排成平行四边形问题

本文主要是介绍中兴2018届应届生在线编程测验0829 数学家排成平行四边形问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题:

欧几里得,毕达哥拉斯,帕斯卡和蒙特打算到公园游玩.将公园可视为N(行)*M(列)个位置.帕斯卡,蒙特和欧几里得站在3个不同的位置.毕达哥拉斯是最后一个到达公园,他决定站在一个能让四个点形成一个平行四边形的位置.欧几里得和蒙特的位置则形成平行四边形的对角线.

编写一个算法,帮助毕达哥拉斯决定站在公园的什么位置.

输入

函数输入包括七个参数

vector<int> toCompleteParrelogram(int rows, int cols, char** p, int euclidX, int euclidY, int monteX, int monteY)

分别代表行数,列数,公园的符号矩阵,欧几里得X坐标,欧几里得Y坐标,蒙特X坐标,蒙特Y坐标.

p中符号"+"代表人的位置,"-"代表空地.

输出

返回一个整数列表,表示毕达哥拉斯完成平行四边形应站的X和Y的坐标.

用例1

输入:

4,8

--------

-+------

--------

-+----+-

输出: 

2 7 

用例2

输入:

----

-+--

+---

----
--+-

输出:

4 4

分析:如图四个点代表四位数学家的位置,标号为名字的首字母大写.由平行四边形的性质可知.

EP = MB

MP = BE

题中又有欧几里得和蒙特的位置则形成平行四边形的对角线.以上两点还不能保证这些

比如下图

图中的矩形MEB1P也满足上述两个条件,而实际上满足题意的是MBEP.所以还要加一个条件,BP的中点和ME的中点重合.

下面是参考程序:

#include <iostream>
#include <vector>
using namespace std;int squaredistance(int row1, int col1,int row2, int col2) //两个位置之间距离的平方
{return (row1 - row2)*(row1 - row2) + (col1 - col2)*(col1 - col2);
}double MidPoint(int coord1, int coord2) //两个坐标的中点
{return 1.0 / 2 * (coord1 + coord2);
}vector<int> toCompleteParrelogram(int rows, int cols, char** p, int euclidX, int euclidY, int monteX, int monteY)
{int pasikX, pasikY, bidaX, bidaY;int i, j;//找出第三个人的坐标vector<int> ivec;for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){if (*(*(p + i) + j) == '+')        //引用元素的格式{if ((i + 1 != euclidX || j + 1 != euclidY) && (i + 1 != monteX || j + 1 != monteY))    //数组下标从0开始,而位置从1开始,所以加上1{                                                                                    //对于二维的点,有一维不一样,两者就是不一样的pasikX = i + 1;pasikY = j + 1;}}}}//求出第四个人的位置for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){//两条对边相等EP = MB  MP = BEif ( squaredistance(euclidX, euclidY, pasikX, pasikY) == squaredistance(monteX, monteY, i + 1, j + 1) && squaredistance(euclidX, euclidY, i + 1, j + 1) == squaredistance(monteX, monteY, pasikX, pasikY)){//对角线的中点重合   if (MidPoint(euclidX, monteX) == MidPoint(pasikX, i+1) && MidPoint(euclidY, monteY) == MidPoint(pasikY, j + 1)){bidaX = i + 1;bidaY = j + 1;ivec.push_back(bidaX);ivec.push_back(bidaY);return ivec;}}}}cout << "无解" << endl;    //当所有点都判断完仍没有return回去,则代表无解.return ivec;    //仍要return
}int main()
{char *a[] = { "--------", "-+------", "--------", "-+----+-" };//案例一
//     char *a[] = { "----", "-+--", "+---", "----" ,"--+-"};//案例二char **pp = a;vector<int>ivec1(toCompleteParrelogram(4, 8, pp,2,2,4,7));//案例一//     vector<int>ivec1(toCompleteParrelogram(5, 4, pp, 2, 2, 5, 3));案例二. 初始化时可以这样,但不可分成两步.因为那就是赋值了.if (ivec1.size() == 2){cout << ivec1[0]<< " " << ivec1[1] << endl;}return 0;
}

这篇关于中兴2018届应届生在线编程测验0829 数学家排成平行四边形问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/675586

相关文章

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

电力系统中的A类在线监测装置—APView400

随着电力系统的日益复杂和人们对电能质量要求的提高,电能质量在线监测装置在电力系统中得到广泛应用。目前,市场上的在线监测装置主要分为A类和B类两种类型,A类和B类在线监测装置主要区别在于应用场景、技术参数、通讯协议和扩展性。选择时应根据实际需求和应用场景综合考虑,并定期维护和校准。电能质量在线监测装置是用于实时监测电力系统中的电能质量参数的设备。 APView400电能质量A类在线监测装置以其多核

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

缓存雪崩问题

缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。 解决方案: 1、使用锁进行控制 2、对同一类型信息的key设置不同的过期时间 3、缓存预热 1. 什么是缓存雪崩 缓存雪崩是指在短时间内,大量缓存数据同时失效,导致所有请求直接涌向数据库,瞬间增加数据库的负载压力,可能导致数据库性能下降甚至崩溃。这种情况往往发生在缓存中大量 k

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码