質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

1回答

2503閲覧

サイコロ アルゴリズム

退会済みユーザー

退会済みユーザー

総合スコア0

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

1クリップ

投稿2017/10/23 02:11

AIZU ONLINE JUDGEで、アルゴリズムの勉強をしているのですが、サイコロの部分でよくわからない部分があります。

サイコロ1

他の方が書いたJavaのプログラムを見ているのですが、何でこうなるのかがわかりません。

Java

1import java.io.BufferedReader; 2import java.io.IOException; 3import java.io.InputStreamReader; 4 5public class Main { 6 public static void main(String[] args) throws IOException { 7 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 8 String[] input = br.readLine().split(" "); 9 int[] sides = new int[6]; 10 for (int i = 0; i < 6; i++) { 11 sides[i] = Integer.parseInt(input[i]); 12 } 13 Dice dice = new Dice(sides); 14 15 char[] ca = br.readLine().toCharArray(); 16 for (char c : ca) { 17 switch (c) { 18 case 'N': 19 dice.N(); 20 break; 21 case 'E': 22 dice.E(); 23 break; 24 case 'S': 25 dice.S(); 26 break; 27 case 'W': 28 dice.W(); 29 break; 30 default: 31 break; 32 } 33 } 34 System.out.println(dice.getSide(0)); 35 } 36 37} 38 class Dice { 39 private int[] sides = new int[6]; 40 Dice(int[] sides) { 41 this.sides = sides; 42 } 43 44 public void N() { 45 int tmp = sides[0]; 46 sides[0] = sides[1]; 47 sides[1] = sides[5]; 48 sides[5] = sides[4]; 49 sides[4] = tmp; 50 } 51 52 public void E() { 53 int tmp = sides[0]; 54 sides[0] = sides[3]; 55 sides[3] = sides[5]; 56 sides[5] = sides[2]; 57 sides[2] = tmp; 58 } 59 60 public void S() { 61 int tmp = sides[0]; 62 sides[0] = sides[4]; 63 sides[4] = sides[5]; 64 sides[5] = sides[1]; 65 sides[1] = tmp; 66 } 67 68 public void W() { 69 int tmp = sides[0]; 70 sides[0] = sides[2]; 71 sides[2] = sides[5]; 72 sides[5] = sides[3]; 73 sides[3] = tmp; 74 } 75 76 public int getSide(int i) { 77 return sides[i]; 78 } 79} 80

class DiceのN()E()S()W()の配列がなぜ、この順番になるのでしょうか?

class Dice {
private int[] sides = new int[6];
Dice(int[] sides) {
this.sides = sides;
}

public void N() { int tmp = sides[0]; sides[0] = sides[1]; sides[1] = sides[5]; sides[5] = sides[4]; sides[4] = tmp; }

ページの図にあるサイコロをN方向に転がしていくとすると、2→6→5→1の順に数字が上部に来ると思うのですが…。

私が、何か考え違いをしているのでしょうか?

自分でも考えているのですが、答えが分からず困っています。わかる方いらっしゃいましたら、教えて下さい。

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

問題では1〜6のラベルが割り振られていますが、Javaの配列はインデックスが0から始まる関係上、問題のラベル1〜6を配列の0〜5に対応させているだけです。
だから、N方向に転がしたとき、問題のラベル通りなら仰るとおり2→6→5→1の順に移りますが、
配列の番号は1ずつ下がるため、これが1→5→4→0の移動に対応します。

投稿2017/10/23 02:31

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/10/23 04:16

回答ありがとうございます。 配列が0から始まるから、1→5→4→0になるのですね。気が付きませんでした。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問