画心形


题目描述:

你需要在一个10*10的点阵中,根据制定的两个顶点,画出一个符合要求的心形,如下如:

输入描述:

你会得到两组参数,代表这心形上端两个点的坐标,(x1,y1),(x2,y2)代表这两点所在的行列,如上图,你得到的坐标为(2,3),(2,7)

数据保证 x2=x1,|y1-y2| >1

输入格式为:

2 3 2 7

输出描述:

你需要输出一个10*10的点阵

需要画心形的部分为‘#’,不需要画的部分为‘-’,每两个点之间用空格分开,结果没有空格

参考样例,心形由三个等腰直角三角形组成

心形边缘斜线的斜率为±1,关于奇偶的处理参考输入输出样例

心形可能会超出边界,超出部分不需要画出。

解法:

根据输入的两个点的坐标可以计算出上端等腰三角形和下端等腰三角形的高度,

  1. 如果行数i小于心形的上顶点行号或者大于心形的下顶点行号,则全部打印‘-’;
  2. 将剩余区域分为上下两部分,以行号是否超过上端等腰三角形底边为界:
  • 在上端,两个等腰三角形将区域划分为三个部分,分为左部分,中间部分、右部分,根据顶点坐标计算出每个部分的边界位点,然后打印相应字符即可
  • 同样,在下端,一个大的等腰三角形将区域划分为两部分,分别为左部分、右部分。此时需要注意的是,如果|y1-y2|为偶数,则下端等腰三角形的底端顶点为1个点,否则为2个点。

代码:

import java.util.Scanner;/*** 携程笔试题1:画出心型* 输入两组参数,代表心型上端两个点的坐标,(x1,y1),(x2,y2)代表这两点所在的行列。* 例如,2 3 2 7* 代表坐标为(2,3),(2,7)的两个点* 数据保证 x2=x1,|y1-y2|>1*/
public class XieCheng_Code01 {public static int smallHigh, bigHigh, bottomX, bottomY1, bottomY2;public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {int x1 = sc.nextInt();int y1 = sc.nextInt();int x2 = sc.nextInt();int y2 = sc.nextInt();if (x1!=x2||Math.abs(y1-y2)<=1){break;}smallHigh = (y2 - y1) / 2 + 1;//小三角形的高度bigHigh = (y2 - y1) / 2 + (y2 - y1) / 2 + 1;//smallHigh;//大三角形的高度//大三角形底部顶点的x坐标if ((y2 - y1) / 2 % 2 == 0) {bottomX = x1 + smallHigh - 1 + bigHigh - 1;} else {bottomX = x1 + smallHigh + bigHigh - 1;}if (y1 + (y2 - y1) / 2 == y2 - (y2 - y1) / 2) {bottomY1 = bottomY2 = y1 + (y2 - y1) / 2;} else {bottomY1 = y1 + (y2 - y1) / 2;bottomY2 = y2 - (y2 - y1) / 2;}solution(x1, y1, x2, y2);}sc.close();}private static void solution(int x1, int y1, int x2, int y2) {for (int i = 1; i <= 10; i++) {if (i < x1 || i > bottomX) {for (int j = 1; j <= 10; j++) {printSignal(j, "-");}} else {processCore(i, x1, y1, x2, y2);}System.out.println();}}private static void processCore(int i, int x1, int y1, int x2, int y2) {if (i <= x1 + (y2 - y1) / 2) {for (int j = 1; j <= 10; j++) {if ((j >= 1 && j <= y1 + x1 - i - 1) ||(j >= y1 - x1 + i + 1 && j <= y2 + x2 - i - 1) ||(j >= y2 - x2 + i + 1 && j <= 10)) {printSignal(j, "-");} else {printSignal(j, "*");}}} else {for (int j = 1; j <= 10; j++) {if ((j >= 1 && j <= bottomY1 - (bottomX - i) - 1) ||(j >= bottomY2 + (bottomX - i) + 1 && j <= 10)) {printSignal(j, "-");} else {printSignal(j, "*");}}}}private static void printSignal(int j, String c) {if (j == 10) {System.out.print(c);} else {System.out.print(c + " ");}}
}

测试结果:

【2019秋招】携程数据分析岗笔试编程题——画心形相关推荐

  1. 【笔试】备战秋招,每日一题|20230415携程研发岗笔试

    前言 最近碰到一个专门制作大厂真题模拟题的网站 codefun2000,最近一直在上面刷题.今天来进行2023.04.15携程研发岗笔试,整理了一下自己的思路和代码. 比赛地址 A. 找到you 题意 ...

  2. 58同城2020校招转转算法岗笔试编程题

    58同城2020校招转转算法岗笔试编程题 第一题 题目描述:年末了要评选优秀员工了,给定一个优秀员工比率,在员工的评分上计算出能被选中的优秀员工的评分阈值.优秀员工人数=员工人数*优秀员工比率.员工人 ...

  3. 2020校招4399游戏开发岗笔试编程题题解部分

    2020校招4399游戏开发岗笔试编程题题解 序号四 题目描述: 有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位. 输入描述: 一 ...

  4. 2017秋招携程面试经验

    作者:神蜗牛 链接:https://www.nowcoder.com/discuss/36821 来源:牛客网 整个面试30分钟(应该比30分钟少),回答错了临界区也是醉了.. hashmap底层实现 ...

  5. 携程算法岗笔试【20230525】

    前两天写了携程的一道笔试题,感觉题目质量挺不错,这里记录一下. 1. 题目 题目大意如下: 现有n套试卷,每套试卷包含的题目数是i.游游每天的早上和下午都可以选择做一套试卷,当然也可以选择摸鱼(不做题 ...

  6. 2020我的秋招总结帖 [数据分析岗] | 面经集合

    开个帖子,记录秋招漫漫路-✨ 我的总结帖在慢慢收尾啦,7月-10月,一路写总结,回头看,还是有一些值得说的.

  7. 阿里-2019算法岗笔试编程题-kmp匹配

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_25737169/article/details/82503724 </div>&l ...

  8. 《面试》 --阿里巴巴数据分析岗面试编程题解析

    昨天做阿里非研发岗编程题,虽不是很难,但还是因为个人原因调试失败,特此今日复盘,希望能帮助大家提高. 第一题 选择出行方式,ofo是每1.5公里1元,不足1.5公里的按1.5计算 永安行是使用时间,每 ...

  9. 2019秋招阅文数据分析:sql查询连续天数

    表a,有3个字段,日期字段ds(YYYY-MM-DD,如2019-08-28),用户登录账号user_id,用户当天的总付费金额hx_amt,取出2019年8月份,连续付费4天及以上的用户的该连续付费 ...

  10. 2021招银网络提前批笔试编程题C++

    不是我拍的哈,不是我哈,不哈!网上扒的 题一 void *memset(void *s, int c, size_t n); 将已开辟内存空间 s 的首 n 个字节的值设为值 c(给空间初始化) vo ...

最新文章

  1. sed linux 命令
  2. HP存储raid5两块硬盘离线lvm下vxfs文件系统恢复数据过程
  3. Science:固氮(The nitrogen fix)
  4. 一本书带你入门商业数据科学
  5. 《2019人工智能发展报告》出炉
  6. linux 组调度浅析
  7. json-lib解决死循环
  8. DenseNet网络结构产生的.py文件出错解决
  9. Mybatis—多表查询
  10. 一道很简单的贪心算法题~【贪心:我不要脸的伐?】
  11. Qt creator
  12. android 布局圆变椭圆,Android实现自定义圆形、圆角和椭圆ImageView(使用Xfermode图形渲染方法)...
  13. 重磅!原清华副校长任职南科大校长:他考研三次,读博七年,想做科研人偶像...
  14. Linux下启动/关闭Oracle
  15. SkinSharp使用方法
  16. 轮询、长轮询、长连接、websocket
  17. 算法导论------渐近记号Θ、Ο、o、Ω、ω详解
  18. HDU5285.wyh2000 and pupil
  19. 【英语】美式元音 总结
  20. 杂谈:Perl6 树莓Pi Erlang win10 Clojure

热门文章

  1. Pytorch ——基础指北_零 [神经元和激活函数介绍]
  2. GetAdaptersInfo获取网卡信息
  3. 2019PR怎么设置导出比特率?为什么我的PR导出的时候不能控制文件大小?为什么我的PR导出的文件特别大?
  4. 一个完整的软件开发过程到底需要哪些步骤?
  5. “Warning: Potential Security Risk Ahead“解决方案
  6. html页面背景图片不够大怎么办,Word背景图片不够大怎么办
  7. php生成手机桌面快捷方式,php三种创建桌面快捷方式
  8. github-上传本地代码到github仓库
  9. Java SE《基础篇》——(二)程序基础01
  10. 中文维基百科数据处理