【2019秋招】攜程資料分析崗筆試程式設計題——畫心形
畫心形
題目描述:
你需要在一個10*10的點陣中,根據制定的兩個頂點,畫出一個符合要求的心形,如下如:
輸入描述:
你會得到兩組引數,代表這心形上端兩個點的座標,(x1,y1),(x2,y2)代表這兩點所在的行列,如上圖,你得到的座標為(2,3),(2,7)
資料保證 x2=x1,|y1-y2| >1
輸入格式為:
2 3 2 7
輸出描述:
你需要輸出一個10*10的點陣
需要畫心形的部分為‘#’,不需要畫的部分為‘-’,每兩個點之間用空格分開,結果沒有空格
參考樣例,心形由三個等腰直角三角形組成
心形邊緣斜線的斜率為±1,關於奇偶的處理參考輸入輸出樣例
心形可能會超出邊界,超出部分不需要畫出。
解法:
根據輸入的兩個點的座標可以計算出上端等腰三角形和下端等腰三角形的高度,
- 如果行數i小於心形的上頂點行號或者大於心形的下頂點行號,則全部列印‘-’;
- 將剩餘區域分為上下兩部分,以行號是否超過上端等腰三角形底邊為界:
- 在上端,兩個等腰三角形將區域劃分為三個部分,分為左部分,中間部分、右部分,根據頂點座標計算出每個部分的邊界位點,然後列印相應字元即可
- 同樣,在下端,一個大的等腰三角形將區域劃分為兩部分,分別為左部分、右部分。此時需要注意的是,如果|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秋招】攜程資料分析崗筆試程式設計題——畫心形
畫心形 題目描述: 你需要在一個10*10的點陣中,根據制定的兩個頂點,畫出一個符合要求的心形,如下如: 輸入描述: 你會得到兩組引數,代表這心形上端兩個點的座標,(x1,y1),(x2,y2)代表這兩點所在的行列,如上圖,你得到的座標為(2,3),(2,7)
【秋招】京東_資料分析崗_面試題整理
1. 怎麼做惡意刷單檢測 分類問題用機器學習方法建模解決,我想到的特徵有: 1)商家特徵:商家歷史銷量、信用、產品類別、發貨快遞公司等 2)使用者行為特徵:使用者信用、下單量、轉化率、下單路徑、瀏覽店鋪行為、支付賬號 3)環境特徵(主要是避免機
2018鏈家校招內推-大資料開發工程師筆試程式設計題
題目1(如下截圖所示): 分析:一個排序問題 C++實現: #include<iostream> using namespace std; void insertSort(int *a
筆經-騰訊2018暑期實習生-資料分析崗筆試經歷
發現今年雖然很多公司有了資料分析崗位面向本科生開放,但幾乎資料分析師的實習筆試幾乎都沒有考程式設計,注意是幾乎都沒有考!這也給了我們一些啟發,也說明現在的資料分析崗位職能方向更細化。 不定項選擇(每題4分共25題) 1.同事小鵝在訓練深度學習模型是發現訓
OPPO 2019校園招聘C/C++開發工程師(手機方向) 筆試程式設計題-2018.09.10
思路: 1. 分割字串,提取數字 2. multimap儲存 3. 遍歷找到相應結果輸出 #include <iostream> #include <map> #
【計算機視覺演算法崗面經】“吐血”整理:2019秋招資料
轉自:https://blog.csdn.net/liuxiao214/article/details/83043170 感謝整理,侵刪 //2018/09/27 兵荒馬亂、浩浩蕩蕩的秋招終於差不多要結束了。 秋招這段時間真是感慨很多,一時得意一時失意,還要平衡一不小心就來的心理落差
攜程2019秋招面經
時間:20180912 11:30 地點:武漢玉豐國際酒店 一面(40mins) 1、簡單的自我介紹 2、說一說selenium的理解。 3、說一說Spring的理解(IOC和AOP)IOC怎麼就反轉了。 4、String和StringBulider區別,S
【360】2019秋招筆試題(圈地運動、Bitttts、魔法陣列)python
筆試已掛,諸位隨意看看就好,筆者程式設計水平一般。 木棍數n<3,不會組成多邊形;n>=3,只要判斷前n-1個的長度和是否比最大的那個大,大就說明能組成多邊形。 n = int(raw_input()) stem = map(int,raw_in
【Keep】2019校招第二批-Java/資料/演算法工程師(平板支撐、各位數之和、收集沙子)
這題沒想到快捷方法,就用普通方法做了,先查詢是否在陣列中,如果在就返回index,不在就新增,再返回index。 值得注意的是python的input().split的使用。 s,m = [k for k in input().split()] #s儲存一個
【計算機視覺演算法崗面經】“吐血”整理:2019秋招面經
//2018/09/28 當初開始面試時就想著,以後我一定要寫一篇面經,現在是來還願的時候了。 首先,嗯,非常感謝牛客平臺,提供了很多資訊啊。而且去年11月曾報名左神的課程,非常感謝左神啊!課程相當值啊,你見過用1分鐘吃完飯接著講課的老師嗎!你見過自己加班加點也要把所有內容都講完
【秋招】騰訊_資料分析崗_面試題整理
1. 二叉樹題目 略 2. 層序遍歷演算法題 1)由頂向下逐層訪問 2)可以用佇列儲存樹,每次列印根節點並將左右節點放進佇列 3. 圖論中的最大團、連通分量,然後問圖劃分的演算法 略 4. 如何判斷社群活躍度(基於圖),現在想著可
【秋招】今日頭條_資料分析崗_面試題整理
1. 做自我介紹,著重介紹跟資料分析相關的經驗,還有自己為什麼要做資料分析 略。 2. 如果次日使用者留存率下降了 5%該怎麼分析 1)首先採用“兩層模型”分析:對使用者進行細分,包括新老、渠道、活動、畫像等多個維度,然後分別計算每個維度下不同使用者的次日留
【秋招】拼多多_資料分析崗_面試題整理
1. 貝葉斯公式複述並解釋應用場景 1)P(A|B) = P(B|A)*P(A) / P(B) 2)如搜尋query糾錯,設A為正確的詞,B為輸入的詞,那麼: a. P(A|B)表示輸入詞B實際為A的概率 b. P(B|A)表示詞A
阿里2019秋招測試題【物流配送】
思路:深搜+回溯 注意:最後回到起點 package niukeshuati; import java.util.Scanner; public class Transport { static int minpath = Integer.MAX_VALUE
1.虎牙直播2019秋招編程題
span system http ring ret 第一題 pre png string 第一題: #include <iostream> #include <string> using namespace std; bool IsVoC
美團2019秋招後臺開發編程題題解
就是 public imp 一行 同時 import ++ 多少 等於 圖的遍歷 題目描述 給定一張包含N個點、N-1條邊的無向連通圖,節點從1到N編號,每條邊的長度均為1。假設你從1號節點出發並打算遍歷所有節點,那麽總路程至少是多少? 輸入 第一行包含一個整數N,1≤N≤
【2019春招準備:12.原子類操作Atomic包】
【內容】 【補充】 Thread.yeild:讓出cpu使用權,重新平等競爭 Thread.activeCount() 【內容】 問題引入 public static int 經過20執行緒的1000次count++ 即時判定Thread.aliveCount()>
【2019春招準備:總目錄】
面向崗位及其優先順序:java後端>大資料開發>前端 專案 連結 1 2 3
【2019最新篇】喬治城大學Georgetown——大資料下的學校
【2019最新篇】喬治城大學Georgetown——大資料下的學校 Collegelife 2019 最新大資料 最新資料在校生親身體驗 帶給你最真實的美國大學資訊 文丨CL Team 圖丨網路 Georgetown篇 Georgetown
【順豐科技】 2019校招 人工智慧與機器學習工程師線上考試 筆試程式設計題
#!/bin/python # -*- coding: utf8 -*- import sys import os import re #請完成下面這個函式,實現題目要求的功能 #當然,你也可以不按照下面這個模板來作答,完全按照自己的想法來 ^-^ #**