摘要:題目在方陣?yán)锾钊胍筇畛缮咝巍L顢?shù)的循環(huán)按照走。重點是控制蛇的方向和移動范圍。假設(shè)表示行數(shù),表示列數(shù)垂直向下,遞增,不變,到達(dá)最下方變水平,遞增變?yōu)檫f減。還有要注意矩陣下標(biāo)和坐標(biāo)的區(qū)別,原點位置不同,不建議用作為變量名,易混淆。
題目:
在nn方陣?yán)锾钊?,2,...,nn,要求填成蛇形。例如n=4時方陣為:
10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4
解法:
這題感覺挺麻煩的,要對整個矩陣的形成過程有清晰的認(rèn)識。
填數(shù)的循環(huán)按照Step1->Step2->Step3->Step4走。重點是控制蛇的方向和移動范圍。
我用了一個布爾控制蛇垂直走還是水平走,
另外一個布爾控制在當(dāng)前方向遞增遞減,
另外用四個變量控制蛇上下左右活動范圍。
假設(shè)j表示行數(shù),i表示列數(shù):
S1: 垂直向下,j遞增,i不變,到達(dá)最下方變水平,遞增變?yōu)檫f減。
S2: 水平向左,j不變,i遞減,到達(dá)最左方變垂直,遞減還是遞減。
S3:垂直向上, j遞減,i不變,到達(dá)最上方變水平,遞減變遞增。
S4: 水平向右,j不變,i遞增,到達(dá)(最右-1)列時變垂直進(jìn)入下一個內(nèi)環(huán),遞增還是遞增。
尤其要注意分清行數(shù)列數(shù)和水平垂直方向的關(guān)系:水平走是列數(shù)變,垂直走是行數(shù)變。
還有要注意矩陣下標(biāo)和x,y坐標(biāo)的區(qū)別,原點位置不同,不建議用x,y作為變量名,易混淆。
代碼:
import java.util.*; public class Main { private static void snakeSquare(int n) { int[][] square = new int[n][n]; // true is increment, false is decrement boolean delta = true; // ture is going through row j(vertically), false is going through column i (horizontally) boolean direction = true; // R,r是上下邊界值;C,c是左右邊界值 int R = n-1, C = n-1, r = 0, c = 0; for(int i = n-1, j = 0,counter = 0 ; counter < n*n;counter++){ square[j][i] = counter + 1; // 垂直往下 if(direction && delta) { j+=1; if(j == C) {direction = !direction;delta = !delta;} } //垂直向上 else if(direction && !delta) { j -= 1; if(j == c) {direction = !direction;delta = !delta;} } //水平向右 else if(!direction && delta) { i += 1; if(i == R-1) { direction = !direction; //水平向右結(jié)束后說明要進(jìn)入下一個內(nèi)環(huán),要改變邊界范圍 C -= 1;R -= 1;r += 1;c += 1; } } //水平向左 else { i -= 1; if(i == r) direction = !direction; } } for(int i = 0 ; i < n; i++){ for(int j = 0; j < n;j++) System.out.print(square[i][j] + " "); System.out.printf("%n"); } } public static void main(String[] args) { // write your code here Scanner scn = new Scanner(System.in); while(scn.hasNextInt()) snakeSquare(scn.nextInt()); scn.close(); } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/66072.html
摘要:我認(rèn)為賽碼的題挺有趣的其實,所以還是值得做。還有更快的方法,舉例發(fā)現(xiàn)股價和天數(shù)之間是有一些規(guī)律的發(fā)現(xiàn)同一遞增周期內(nèi)股價與天數(shù)的差值相同。接下來只要能總結(jié)出天數(shù)和差值的關(guān)系就能知道股價了。 題目: 股票會有以下變化:第一天不變,以后漲一天,跌一天,漲兩天,跌一天,漲三天,跌一天...依此類推。為方便計算,假設(shè)每次漲和跌皆為1,股票初始單價也為1,請計算買股票的第n天每股股票值多少錢?例子...
摘要:回型蛇形矩陣形式上述這種形式即為蛇形矩陣。例如的中間公約數(shù)為,所以為三行三列。若為則中間公約數(shù)分別是,所以為四行五列。之后在根據(jù)行列中比較小的那個來判斷有幾層回字型。源碼在瀏覽器控制臺即可調(diào)用函數(shù)。 回型/蛇形矩陣形式 1 2 3 8 9 4 7 6 5 上述這種形式即為蛇形矩陣。 原文首先發(fā)布于 TinyTin的自留地 解決思路 給定一個數(shù)字 n(為最終值例如上述...
摘要:昨天看到了賽碼在線編程的一道題,熱度很高。賽碼股神題目是這樣的漲一天,跌一天,漲兩天,跌一天看似很有規(guī)律,看似很簡單。給大神跪了。。。大神們的解法簡單易懂的方法以上是最高票的答案。。。 昨天看到了賽碼在線編程的一道題,熱度很高。賽碼-股神題目是這樣的: showImg(https://segmentfault.com/img/bVbgMXd?w=1053&h=569); 漲一天,跌一天...
摘要:而此處針對進(jìn)一步的搜索,有兩個問題需要考慮如何選取搜索起點方格確定哪種搜索策略深度優(yōu)先搜索,廣度優(yōu)先搜索關(guān)于第一個問題,無論選擇哪個方格起始搜索,對于能否解決問題來說并不存在差異。 Github倉庫地址 學(xué)習(xí)是為了尋找解決問題的答案,若脫離了問題只為知曉而進(jìn)行的打call,那么隨時間流逝所沉淀下來的,估計就只有重在參與的虛幻存在感了,自學(xué)的人就更應(yīng)善于發(fā)現(xiàn)可供解決的問題。為了入門AI,...
摘要:先介紹一下本人應(yīng)屆前端開發(fā)一枚,非科班出身,專業(yè)是化學(xué),大學(xué)期間開始自學(xué)前端開發(fā),在今年春招實習(xí)和秋招的時候投了一些公司,拿到一些京東拼多多虎牙等,總體來說還算滿意,特地寫一篇文章來總結(jié)一下面試的那些套路。 showImg(https://segmentfault.com/img/remote/1460000011897700); 先介紹一下本人應(yīng)屆前端開發(fā)一枚,非科班出身,專業(yè)是化學(xué)...
閱讀 1281·2021-11-15 18:14
閱讀 3167·2021-08-25 09:38
閱讀 2673·2019-08-30 10:55
閱讀 2704·2019-08-29 16:39
閱讀 1316·2019-08-29 15:07
閱讀 2457·2019-08-29 14:14
閱讀 821·2019-08-29 12:36
閱讀 921·2019-08-29 11:21