結果

問題 No.401 数字の渦巻き
ユーザー tsunabittsunabit
提出日時 2019-06-08 00:46:51
言語 Java21
(openjdk 21)
結果
AC  
実行時間 239 ms / 2,000 ms
コード長 3,044 bytes
コンパイル時間 4,137 ms
コンパイル使用メモリ 77,308 KB
実行使用メモリ 48,476 KB
最終ジャッジ日時 2024-10-05 22:12:10
合計ジャッジ時間 9,405 ms
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 126 ms
41,436 KB
testcase_01 AC 111 ms
39,660 KB
testcase_02 AC 122 ms
40,300 KB
testcase_03 AC 128 ms
41,416 KB
testcase_04 AC 128 ms
40,956 KB
testcase_05 AC 130 ms
41,212 KB
testcase_06 AC 133 ms
41,564 KB
testcase_07 AC 151 ms
41,524 KB
testcase_08 AC 153 ms
41,268 KB
testcase_09 AC 152 ms
41,320 KB
testcase_10 AC 148 ms
41,468 KB
testcase_11 AC 150 ms
41,632 KB
testcase_12 AC 161 ms
41,684 KB
testcase_13 AC 174 ms
41,836 KB
testcase_14 AC 174 ms
41,208 KB
testcase_15 AC 177 ms
41,604 KB
testcase_16 AC 172 ms
41,612 KB
testcase_17 AC 184 ms
41,772 KB
testcase_18 AC 200 ms
41,324 KB
testcase_19 AC 187 ms
41,752 KB
testcase_20 AC 199 ms
41,916 KB
testcase_21 AC 212 ms
41,872 KB
testcase_22 AC 222 ms
41,876 KB
testcase_23 AC 214 ms
42,384 KB
testcase_24 AC 206 ms
42,328 KB
testcase_25 AC 199 ms
42,468 KB
testcase_26 AC 211 ms
42,044 KB
testcase_27 AC 228 ms
42,328 KB
testcase_28 AC 209 ms
42,192 KB
testcase_29 AC 239 ms
48,476 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import java.util.*;
import java.math.*;

public class No401 {
    public static void main(String[] args) {
        // 標準入力から読み込む際に、Scannerオブジェクトを使う。
        Scanner s = new Scanner(System.in);
        // 配列と合わせるため-1する
        int n = s.nextInt() - 1;
//        初期値が0で進めなくなったら+1する変数𝑑を作って、𝑑を4で割った余りが
//        0 ならば右に進む、
//        1 ならば下に進む、
//        2 ならば左に進む、
//        3 ならば上に進む、
//        とすれば渦巻きができます。
        int d = 0;
        int count = 1;
        int gyou = 0, retu = 0;
        int[][] masu = new int[n + 1][n + 1];
        while(count <= (n + 1) * (n + 1)) {
        	// masu[gyou][retu] = count;
        	// 右へ移動
        	if(d % 4 == 0) {
        		masu[gyou][retu] = count;
//        		System.out.println("masu[" + gyou + "][" + retu + "] = " + count);
        		retu++;
        		// dの判定
        		if(retu == n) {
        			d++;
        		}else if(retu < n && masu[gyou][retu + 1] != 0) {
        			d++;
        		}
        	// 下へ移動
        	}else if(d % 4 == 1) {
        		masu[gyou][retu] = count;
//        		System.out.println("masu[" + gyou + "][" + retu + "] = " + count);
        		gyou++;
        		// dの判定
        		if(gyou == n) {
        			d++;
        		}else if(gyou < n && masu[gyou + 1][retu] != 0) {
        			d++;
        		}
        	// 左へ移動
        	}else if(d % 4 == 2) {
        		masu[gyou][retu] = count;
//        		System.out.println("masu[" + gyou + "][" + retu + "] = " + count);
        		retu--;
        		// dの判定	
        		if(retu == 0) {
        			count++;
        			masu[gyou][retu] = count;
//        			System.out.println("masu[" + gyou + "][" + retu + "] = " + count);
        			gyou--;
        			d++;
        		}else if(retu > 0 && masu[gyou][retu - 1] != 0) {
        			d++;
        		}
        	// 上へ移動
        	}else if(d % 4 == 3) {
        		// dの判定
        		if(gyou == 0) {
        			count++;
        			masu[gyou][retu] = count;
//        			System.out.println("masu[" + gyou + "][" + retu + "] = " + count);
        			d++;
        		}else if(gyou > 0 && masu[gyou - 1][retu] != 0) {
//        			System.out.println("koko");
        			masu[gyou][retu] = count;
//        			System.out.println("masu[" + gyou + "][" + retu + "] = " + count);
        			retu++;
        			d++;
        		}else {
        			masu[gyou][retu] = count;
//            		System.out.println("masu[" + gyou + "][" + retu + "] = " + count);
            		gyou--;
        		}
        	}
        	count++;
        }
        
        // 出力
        for(int[] v : masu) {
        	for(int vv : v) {
//        		System.out.print(vv + " ");
        		System.out.printf("%03d ",vv);
//        		System.out.print(" ");
//        		System.out.printf("[%05d]",123);
        	}
        	System.out.println();
        }
    }
}
0