国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

賽碼模擬題:蛇形填數 SnakeSquare (Java 8)

lk20150415 / 1513人閱讀

摘要:題目在方陣里填入要求填成蛇形。填數的循環按照走。重點是控制蛇的方向和移動范圍。假設表示行數,表示列數垂直向下,遞增,不變,到達最下方變水平,遞增變為遞減。還有要注意矩陣下標和坐標的區別,原點位置不同,不建議用作為變量名,易混淆。

題目:
在nn方陣里填入1,2,...,nn,要求填成蛇形。例如n=4時方陣為:

10 11 12 1
9  16 13 2
8  15 14 3
7  6  5  4

解法:
這題感覺挺麻煩的,要對整個矩陣的形成過程有清晰的認識。

填數的循環按照Step1->Step2->Step3->Step4走。重點是控制蛇的方向和移動范圍。

我用了一個布爾控制蛇垂直走還是水平走,
另外一個布爾控制在當前方向遞增遞減,
另外用四個變量控制蛇上下左右活動范圍。

假設j表示行數,i表示列數:
S1: 垂直向下,j遞增,i不變,到達最下方變水平,遞增變為遞減。
S2: 水平向左,j不變,i遞減,到達最左方變垂直,遞減還是遞減。
S3:垂直向上, j遞減,i不變,到達最上方變水平,遞減變遞增。
S4: 水平向右,j不變,i遞增,到達(最右-1)列時變垂直進入下一個內環,遞增還是遞增。

尤其要注意分清行數列數和水平垂直方向的關系:水平走是列數變,垂直走是行數變。

還有要注意矩陣下標和x,y坐標的區別,原點位置不同,不建議用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;
                    //水平向右結束后說明要進入下一個內環,要改變邊界范圍
                    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();
    }
}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/66072.html

相關文章

  • 賽碼擬題:股神 stockmaster (java8)

    摘要:我認為賽碼的題挺有趣的其實,所以還是值得做。還有更快的方法,舉例發現股價和天數之間是有一些規律的發現同一遞增周期內股價與天數的差值相同。接下來只要能總結出天數和差值的關系就能知道股價了。 題目: 股票會有以下變化:第一天不變,以后漲一天,跌一天,漲兩天,跌一天,漲三天,跌一天...依此類推。為方便計算,假設每次漲和跌皆為1,股票初始單價也為1,請計算買股票的第n天每股股票值多少錢?例子...

    張漢慶 評論0 收藏0
  • javascript生成回型矩陣/蛇形矩陣

    摘要:回型蛇形矩陣形式上述這種形式即為蛇形矩陣。例如的中間公約數為,所以為三行三列。若為則中間公約數分別是,所以為四行五列。之后在根據行列中比較小的那個來判斷有幾層回字型。源碼在瀏覽器控制臺即可調用函數。 回型/蛇形矩陣形式 1 2 3 8 9 4 7 6 5 上述這種形式即為蛇形矩陣。 原文首先發布于 TinyTin的自留地 解決思路 給定一個數字 n(為最終值例如上述...

    n7then 評論0 收藏0
  • 賽碼網編程題--“股神”

    摘要:昨天看到了賽碼在線編程的一道題,熱度很高。賽碼股神題目是這樣的漲一天,跌一天,漲兩天,跌一天看似很有規律,看似很簡單。給大神跪了。。。大神們的解法簡單易懂的方法以上是最高票的答案。。。 昨天看到了賽碼在線編程的一道題,熱度很高。賽碼-股神題目是這樣的: showImg(https://segmentfault.com/img/bVbgMXd?w=1053&h=569); 漲一天,跌一天...

    SexySix 評論0 收藏0
  • 《AI之矛》(1)【數獨Agent】

    摘要:而此處針對進一步的搜索,有兩個問題需要考慮如何選取搜索起點方格確定哪種搜索策略深度優先搜索,廣度優先搜索關于第一個問題,無論選擇哪個方格起始搜索,對于能否解決問題來說并不存在差異。 Github倉庫地址 學習是為了尋找解決問題的答案,若脫離了問題只為知曉而進行的打call,那么隨時間流逝所沉淀下來的,估計就只有重在參與的虛幻存在感了,自學的人就更應善于發現可供解決的問題。為了入門AI,...

    CatalpaFlat 評論0 收藏0
  • 前端開發應屆生面試指南(含各大公司具體指南及面試真題)

    摘要:先介紹一下本人應屆前端開發一枚,非科班出身,專業是化學,大學期間開始自學前端開發,在今年春招實習和秋招的時候投了一些公司,拿到一些京東拼多多虎牙等,總體來說還算滿意,特地寫一篇文章來總結一下面試的那些套路。 showImg(https://segmentfault.com/img/remote/1460000011897700); 先介紹一下本人應屆前端開發一枚,非科班出身,專業是化學...

    sunnyxd 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<