結果

問題 No.401 数字の渦巻き
ユーザー tsunabit
提出日時 2019-06-08 00:46:51
言語 Java
(openjdk 23)
結果
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
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 30
権限があれば一括ダウンロードができます

ソースコード

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